在JavaScript中,Map
是一种内置的数据结构,它允许你存储键值对,并且能够记住键的原始插入顺序。Map
对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象和原始值)都可以作为一个键或一个值。
Map
的键可以是任何类型,包括函数、对象和基本类型。Map
中的元素会按照它们被插入的顺序进行迭代。Map
的性能通常优于普通对象。Map.size
属性直接获取键值对的数量。Map
是 ECMAScript 2015 引入的新数据结构。
// 创建一个新的 Map 实例
let myMap = new Map();
// 设置键值对
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
myMap.set(3, 'value3'); // 数字也可以作为键
myMap.set({name: 'keyObj'}, 'valueObj'); // 对象也可以作为键
// 读取键值对
console.log(myMap.get('key1')); // 输出: value1
console.log(myMap.get(3)); // 输出: value3
console.log(myMap.get({name: 'keyObj'})); // 输出: undefined,因为对象引用不同
// 正确获取对象键的值
let keyObj = {name: 'keyObj'};
myMap.set(keyObj, 'valueObj');
console.log(myMap.get(keyObj)); // 输出: valueObj
// 获取 Map 的大小
console.log(myMap.size); // 输出: 3
// 遍历 Map
for (let [key, value] of myMap) {
console.log(key + ' = ' + value);
}
// 删除键值对
myMap.delete('key1');
console.log(myMap.has('key1')); // 输出: false
问题: 为什么 myMap.get({name: 'keyObj'})
返回 undefined
?
原因: 在JavaScript中,对象是通过引用进行比较的。即使两个对象包含相同的数据,它们也被视为不同的键,除非它们引用的是同一个对象实例。
解决方法: 确保使用相同的对象引用作为键。
let keyObj = {name: 'keyObj'};
myMap.set(keyObj, 'valueObj');
console.log(myMap.get(keyObj)); // 正确获取值
通过这种方式,你可以确保在使用对象作为键时能够正确地读取到关联的值。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云