慕桂英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

臨摹微笑
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
提交
取消