猿问

Map.prototype.has() 不能使用数组作为键?

我怎样才能让 Map.has() 与数组一起工作?


为什么这个例子输出false?


let test = new Map();

test.set(["a", "b"], "hi");


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


慕桂英546537
浏览 163回答 2
2回答

慕勒3428872

它不起作用,因为您的两个数组没有引用同一个对象。数组内容相同,但数组本身不同。如果您使用相同的对象来设置和检索值,它将起作用:let test = new Map();let key = ["a", "b"];test.set(key, "hi");console.log(test.has(key)); // true

临摹微笑

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));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答