当您这样做时,map[1] = 2;
您不是在地图数据结构本身中设置项目,而是在基础通用对象上。因此,您不能期望与地图相关的方法has()
能够get()
返回“正确”的结果,因为地图结构实际上是空的。始终使用 设置地图属性map.set()
。
另外,请注意Map
不支持索引。你不能通过做得到一个项目map[key]
。这将再次访问底层对象的属性。你必须map.get()
改用。
您可以通过执行以下操作看到差异:
let testMap = new Map();
testMap['prop1'] = 'prop1value';
testMap.set('prop2', 'prop2value');
testMap.set('prop1', 'prop1value');
console.log(testMap);
[[Entries]]
是实际的地图结构,其他一切都来自对象。
为了完整起见,对象属性只能是字符串或符号。另一方面,Map 支持所有类型(包括对象和函数)。我这么说是因为如果你这样做:
let testMap = new Map();
testMap['1'] = 'prop1value';
testMap[1] = 'prop2value';
你实际上改变了相同的属性('1'
,数字键实际上被转换为字符串)。但是,如果您使用实际的地图结构:
let testMap = new Map();
testMap.set('1', 'prop1value');
testMap.set(1, 'prop2value');
您有两个单独的条目:'1'
和1
。