在JavaScript中向映射添加键/值对的不同方法

在JavaScript中向映射添加键/值对的不同方法,javascript,object,Javascript,Object,根据MDN,在javascript中向映射添加键/值对的唯一方法是set方法。我想知道当我们添加一个带有方括号的键/值对时,映射的行为是什么,如下所示 const testMap = new Map(); testMap.set( 1,"firstValue" ); testMap[2] = "secondValue"; console.log( testMap ); console.log( testMap[ 2 ] ); console.log( testMap[ '2' ] ); 看来我

根据MDN,在javascript中向映射添加键/值对的唯一方法是set方法。我想知道当我们添加一个带有方括号的键/值对时,映射的行为是什么,如下所示

const testMap = new Map();
testMap.set( 1,"firstValue" );
testMap[2] = "secondValue";
console.log( testMap );
console.log( testMap[ 2 ] );
console.log( testMap[ '2' ] );

看来我们可以同时拥有地图和物体!谁能给我解释一下吗?我知道Map是一种对象,但是这种行为会导致很多bug。有没有办法防止这种情况?顺便说一句,如果添加带有方括号的键/值对,则无法使用get方法检索它。

否您的示例没有按预期工作,当您使用方括号时,您在
testMap
对象上设置了一个属性,而没有设置条目。例如,您可以通过使用
forEach
方法在地图上迭代来确认这一点

const testMap=newmap();
testMap.set(1,“第一个值”);
testMap[2]=“secondValue”;

forEach(x=>console.log(x))否您的示例没有按预期工作,当您使用括号时,您正在
testMap
对象上设置属性,而没有设置条目。例如,您可以通过使用
forEach
方法在地图上迭代来确认这一点

const testMap=newmap();
testMap.set(1,“第一个值”);
testMap[2]=“secondValue”;

forEach(x=>console.log(x))这是一种特殊情况

映射是一种特殊情况,它在内部包含
条目
数组。 当您使用数组表示法时,您的设置键/值对将位于该
条目
数组之外

使用
set
get
方法时,实际上使用的是
map
代码使用的内部
条目
数组

上面的示例实质上创建了一个使用内部
条目
数组的映射对象。但是,使用数组表示法设置第二个对象意味着您正在添加另一个条目/属性,但不在条目数组中

而且,这些值完全不同。 但请注意,这两个数据结构并不冲突。
因此testMap.get(2)与testMap[2]不是同一个变量。

这是一种特殊情况

映射是一种特殊情况,它在内部包含
条目
数组。 当您使用数组表示法时,您的设置键/值对将位于该
条目
数组之外

使用
set
get
方法时,实际上使用的是
map
代码使用的内部
条目
数组

上面的示例实质上创建了一个使用内部
条目
数组的映射对象。但是,使用数组表示法设置第二个对象意味着您正在添加另一个条目/属性,但不在条目数组中

而且,这些值完全不同。 但请注意,这两个数据结构并不冲突。 因此testMap.get(2)与testMap[2]不是同一个变量