为何以数组作为Map的键无法正常工作?
为什么Map.get([2,2])返回undefined?
问题核心在于JavaScript引用类型的相等判断规则。
在JavaScript中,数组属于引用类型——哪怕两个数组的元素完全一致,只要是单独创建的,就会在内存中生成不同的对象,拥有不同的引用地址。
看你的代码:
let map = new Map(); map.set([2,2], 4); // 这里的[2,2]是第一个独立的数组对象 map.get([2,2]); // 这里的[2,2]是另一个全新的数组对象
Map判断键是否匹配时,对引用类型采用**严格相等(===)**比对。由于这两个数组的引用地址不同,[2,2] === [2,2]的结果是false,因此无法匹配到之前存入的键,最终返回undefined。
如果要实现预期效果,你需要把数组存入变量,让set和get使用同一个引用:
let key = [2,2]; let map = new Map(); map.set(key, 4); map.get(key); // 此时返回4
内容的提问来源于stack exchange,提问作者Omn
相关产品推荐
相关产品推荐

