【问题标题】:isArray equivalent for new Map()?isArray 等效于 new Map()?
【发布时间】:2017-03-02 01:45:16
【问题描述】:

如何确定我的数据结构是 Map() 类型的?

我到处找,找不到任何方法

我真的很想开始使用它们,因为我可以将对象用作键!

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    您可以使用 instanceof 运算符

    var map = new Map();
    var arr = [];
    
    console.log(map instanceof Map);
    console.log(map instanceof Array);
    console.log(arr instanceof Map);
    console.log(arr instanceof Array);

    来自Documentation

    instanceof 操作符测试一个对象是否在其原型中 链接构造函数的原型属性。

    【讨论】:

    【解决方案2】:

    您可以使用instanceof 运算符或constructor 属性并检查对象。

    更多信息请阅读:What's the difference between using instanceof and checking the constructor?

    var map = new Map();
    var arr = [];
    
    console.log(map instanceof Map);         // true
    console.log(map instanceof Array);       // false
    console.log(map.constructor === Map);    // true
    console.log(map.constructor === Array);  // false
    
    console.log(arr instanceof Map);         // false
    console.log(arr instanceof Array);       // true
    console.log(arr.constructor === Map);    // false
    console.log(arr.constructor === Array);  // true
    
    // caveat!
    console.log(arr.constructor === Object); // false
    console.log(map.constructor === Object); // false
    console.log(arr instanceof Object);      // true
    console.log(map instanceof Object);      // true

    【讨论】:

    【解决方案3】:

    你甚至可以使用Object.prototype.toString.call,虽然instanceof(@suren srapyan的答案)更受欢迎

    var a = [1,2,3];
    var m = new Map()
    a.forEach((x,i)=>m.set(i+1, x));
    
    console.log(Object.prototype.toString.call(m))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-19
      • 2010-10-22
      • 1970-01-01
      • 2010-12-08
      • 2020-01-12
      • 1970-01-01
      • 2021-10-03
      • 2021-07-27
      相关资源
      最近更新 更多