Javascript 如何测试变量的类型是Map还是Array?

Javascript 如何测试变量的类型是Map还是Array?,javascript,arrays,ecmascript-6,maps,Javascript,Arrays,Ecmascript 6,Maps,在ES6中,如何测试变量是数组还是映射 instance.constructor.name=='Map'是一个危险的习惯,即使它是核心类型,在缩小后用自己的类执行此操作也会破坏测试 验证变量是否为的实例的最可靠方法是什么?您可以使用instanceof。如果对象是否为贴图,则返回true/false var a=新映射; log(映射的实例)不要检查构造函数的.name(string)属性,只需检查构造函数本身是否为==Map: const m=newmap(); console.log(m

在ES6中,如何测试变量是
数组
还是
映射

instance.constructor.name=='Map'
是一个危险的习惯,即使它是核心类型,在缩小后用自己的类执行此操作也会破坏测试


验证变量是否为的实例的最可靠方法是什么?您可以使用
instanceof
。如果对象是否为贴图,则返回true/false

var a=新映射;

log(映射的实例)
不要检查构造函数的
.name
(string)属性,只需检查构造函数本身是否为
==Map

const m=newmap();

console.log(m.constructor==Map)数组可以是javascript中的映射。但是,您可能会与对象或贴图混淆。要检查javascript变量是否为
Map
,可以使用

要测试变量是否是数组的实例,可以编写

var实例=新映射;
console.log(实例instanceof Map);//真的

log(数组的实例实例)//false
您不需要在JavaScript中测试a是否为a,因为
数组
数组
,所以它永远不能是
映射

事实上,它们甚至不是同一种集合,
数组
是一个集合,而
映射
是一个集合。

您可以检查,因为它不是

为了检查该实例,您可以使用

var数组=[],
地图=新地图;
console.log(Array.isArray(Array));//真的
console.log(Array.isArray(map));//假的
console.log(数组instanceof Map);//假的
console.log(映射的映射实例);//正确
const getType=obj=>Object.prototype.toString.call(obj.slice)(8,-1);
const isArray=obj=>getType(obj)='Array';
const isMap=obj=>getType(obj)='Map';
常数arr=[];
console.log(isArray(arr));//真的
常量映射=新映射();

console.log(isMap(map));//真的
数组从来不是一个
映射,它们是完全不同的结构。我注意到您编辑问题的方式使现有答案无效。这样做是不好的形式,因为它使读者感到困惑,并使写这些答案的人看起来像白痴,因为他们的答案不再符合问题。请考虑将您的编辑回滚到以前的版本。但是它可以是一个或另一个,如果它是一个映射,该如何测试它?如果你只有一个数组或一个映射,你可以使用<代码>数组。ISARTAs/COD>。否则你需要检查这个实例。如果你在一个不同的代码>窗口上下文中,这是行不通的。您可能会问自己在这种情况下是如何得到的,但您可能会在主窗口中运行代码,在新打开的窗口中检查
映射
instanceof
如果您在不同的
窗口
等上下文之间跳转,将无法工作。我个人不推荐。尽管如此,我还是用最新的Chrome浏览器进行了测试;它很好用。2015年的情况并非如此,因此这可能因浏览器而异。不正确。这个问题不是无效的。我有一个
clone()。我想知道它是一个地图,一个集合,还是一个数组。这是一个有效的问题,您的答案(包括其他窗口/上下文中的
instanceof
部分)完全错误。不正确。这个问题不是无效的。我有一个
clone()。我想知道它是一张地图,一个集合,还是一个数组(或者一百万其他东西)。这是一个正确的问题。我确实需要测试一下。在我写下答案后,这个问题被编辑成问一些不同的问题。显然,当我写我的答案时,我不可能知道这个问题会变成不同的东西,当时这个问题还没有改变。我的回答对我回答时提出的问题有效。以使现有答案无效的方式更改问题被认为是糟糕的风格,因此,我将要求OP回滚编辑。不幸的是,当问题发生变化时,没有通知回答者。谢谢你提醒我。作为参考,在我回答这个问题时,我问了一个问题“在ES6中,我如何测试
数组
是否是
映射
?”,我相信我的答案是100%正确的:
数组
始终是
数组
,而不是
映射
,因此,不必测试
数组
是否是
映射
。(例如,它们是用打字机写的,但问题不在于打字机。)哦。我不知道问题已经变了。我懂了。
instance instanceof Map