在JavaScript中,Map
对象保存键值对,并且能够记住键的原始插入顺序。Map
的 get
方法用于根据提供的键来检索对应的值。
Map.prototype.get(key)
: 返回键 key
对应的值,如果不存在,则返回 undefined
。
Map
的键可以是任意数据类型,包括对象、函数等。Map
会按照插入顺序迭代键值对。Map
的性能通常优于普通对象。get
方法的参数类型是任意类型,因为它接受任何类型的键。
// 创建一个 Map 对象
const myMap = new Map();
// 设置键值对
myMap.set('name', 'Alice');
myMap.set('age', 25);
myMap.set({}, 'empty object'); // 键可以是对象
// 使用 get 方法获取值
console.log(myMap.get('name')); // 输出: Alice
console.log(myMap.get('age')); // 输出: 25
console.log(myMap.get({})); // 输出: undefined,因为对象是引用类型,{} 与 myMap 中的 {} 不是同一个对象
console.log(myMap.get('nonExistentKey')); // 输出: undefined
// 检查一个键是否存在
if (myMap.has('name')) {
console.log('Name exists in the map');
}
// 删除一个键值对
myMap.delete('age');
// 获取 Map 的大小
console.log(myMap.size); // 输出: 2
问题:为什么 myMap.get({})
返回 undefined
?
原因:在JavaScript中,对象是引用类型。每次你使用 {}
创建一个对象时,你实际上是创建了一个新的对象实例。即使两个对象看起来完全相同,它们也是不同的引用。因此,myMap.get({})
返回 undefined
,因为 get
方法在 Map
中查找的是引用,而不是对象的内容。
解决方法:如果你想要根据对象的内容来检索值,你需要使用一个能够表示对象内容的唯一标识符作为键,比如一个字符串或一个序列化后的字符串(例如使用 JSON.stringify
)。
const objKey = { id: 1 };
myMap.set(JSON.stringify(objKey), 'object value');
// 使用 get 方法获取值
console.log(myMap.get(JSON.stringify(objKey))); // 输出: object value
请注意,使用 JSON.stringify
作为键可能会带来性能问题和安全问题(例如,如果对象包含循环引用或敏感数据),因此这种方法应该谨慎使用。
领取专属 10元无门槛券
手把手带您无忧上云