我怎样才能让 Map.has() 与数组一起工作?为什么这个例子输出false?let test = new Map();test.set(["a", "b"], "hi");console.log(test.has(["a", "b"]));
2 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
它不起作用,因为您的两个数组没有引用同一个对象。数组内容相同,但数组本身不同。
如果您使用相同的对象来设置和检索值,它将起作用:
let test = new Map();
let key = ["a", "b"];
test.set(key, "hi");
console.log(test.has(key)); // true
临摹微笑
TA贡献1982条经验 获得超2个赞
Map key equality
键相等性基于sameValueZero algorithm:NaN被认为与NaN(即使 NaN !== NaN)相同,并且所有其他值根据 === 运算符的语义被认为是相等的。在当前的 ECMAScript 规范中,-0 和 +0 被认为是相等的,尽管在早期的草案中并非如此。有关详细信息,请参阅浏览器兼容性表中的“-0 和 0 的值相等”。
由于在 JS 中比较两个引用永远不会结果为真,因此您需要将键的引用存储在某个变量中并在再次检查 Map 时使用
console.log([] === [])
console.log({} === {})
let test = new Map();
let key = ["a","b"]
test.set(key, "hi");
console.log(test.has(key));
添加回答
举报
0/150
提交
取消