如何检查变量是 Set 还是 Map [重复]
Posted
技术标签:
【中文标题】如何检查变量是 Set 还是 Map [重复]【英文标题】:How to check if a variable is a Set or Map [duplicate] 【发布时间】:2021-03-17 10:34:42 【问题描述】:如何检查 javascript 变量是 Set
还是 Map
?
没有等同于Array.isArray()
,所以我最好的猜测是:
c.__proto__.constructor.name === 'Set'
这种方法有什么我应该注意的陷阱吗?还是更好的方法?
【问题讨论】:
instanceof
在这里不起作用吗?例如,if (thing instanceof Set) ...
永远不要使用__proto__
,它已被弃用。不要使用.constructor
来检查继承,而是使用instanceof
。如果您真的在寻找特定的构造函数,请不要使用.name
,而是通过引用进行比较。 (实际上,这些都不是Map
/Set
所特有的)
【参考方案1】:
如果我理解您的问题,您可以使用instanceof
。
仅检查您的对象是否是所需对象的实例。
var set = new Set();
var map = new Map();
console.log("set variable is Set object:",set instanceof Set)
console.log("map variable is Set object:",map instanceof Set)
console.log("set variable is Map object:",set instanceof Map)
console.log("map variable is Map object:",map instanceof Map)
在本例中,使用语法myVariable instanceof MyObject
,当变量是所需对象时输出为真,否则为假。
【讨论】:
【参考方案2】:您可以使用Object.prototype.toString.call
,这是一种适用于不同帧的强大解决方案。
function isSet(obj)
return Object.prototype.toString.call(obj) === '[object Set]';
function isMap(obj)
return Object.prototype.toString.call(obj) === '[object Map]';
console.log(isSet(new Set));
console.log(isMap(new Map));
【讨论】:
...健壮,直到有人试图用[Symbol.toStringTag]: 'Map'
欺骗你。 instanceof
通常是一个更好的解决方案以上是关于如何检查变量是 Set 还是 Map [重复]的主要内容,如果未能解决你的问题,请参考以下文章