【问题标题】:How to check if a variable is a Set or Map [duplicate]如何检查变量是 Set 还是 Map [重复]
【发布时间】: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所特有的)

标签: javascript ecmascript-6 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 通常是一个更好的解决方案
    猜你喜欢
    • 2016-05-19
    • 2019-12-24
    • 2020-01-30
    • 1970-01-01
    • 2018-11-18
    • 2015-06-10
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多