【问题标题】:Map.prototype.has() not working with arrays as keys? [duplicate]Map.prototype.has() 不使用数组作为键? [复制]
【发布时间】:2019-09-18 10:32:44
【问题描述】:

如何使 Map.has() 与数组一起使用?

为什么这个例子输出假?

let test = new Map();
test.set(["a", "b"], "hi");

console.log(test.has(["a", "b"]));

【问题讨论】:

  • 问题核心:in javascript [1] !== [1]

标签: javascript arrays ecmascript-6


【解决方案1】:

它不起作用,因为您的两个数组没有引用同一个对象。数组内容相同,但数组本身不同。

如果您使用相同的对象来设置和检索值,它将起作用:

let test = new Map();
let key = ["a", "b"];

test.set(key, "hi");

console.log(test.has(key)); // true

【讨论】:

    【解决方案2】:

    Map key equality

    密钥相等性基于sameValueZero algorithm:NaN 是 被认为与NaN 相同(即使 NaN !== NaN)和所有其他 根据 === 的语义,值被认为是相等的 操作员。在当前的 ECMAScript 规范中,-0 和 +0 是 被认为是平等的,尽管在早期的草案中并非如此。看 浏览器兼容性表中的“-0 和 0 的值相等” 详情。

    由于在 JS 中比较两个引用永远不会是真的,所以你需要将 key 的引用存储在某个变量中,并在再次检查 Map 时使用

    console.log([] === [])
    console.log({} === {})

    let test = new Map();
    let key = ["a","b"]
    test.set(key, "hi");
    
    console.log(test.has(key));

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 2018-06-15
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多