为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2021-10-21 13:26:53
我怎样才能让 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


查看完整回答
反对 回复 2021-10-21
?
临摹微笑

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));


查看完整回答
反对 回复 2021-10-21
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信