isArray 等效于 new Map()?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 操作符测试一个对象是否在其原型中 链接构造函数的原型属性。

【讨论】:

另外,请注意the difference between Array.isArray and instanceof Array @Pavlo 感谢您提供有用的链接【参考方案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

【讨论】:

一个有用的参考链接:instanceof vs constructor【参考方案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))

【讨论】:

以上是关于isArray 等效于 new Map()?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中等效于带有 MAP_GROWSDOWN 的 mmap

C# 等效于 C++ map<string,double>

用于指定源搜索路径的 LLDB 等效于 gdb“目录”命令?

js 中直接调用和new的区别

用作类等效项的 C# 命名空间

如何可靠地检查对象是 EcmaScript 6 Map/Set?