在JavaScript中,映射键值对通常是通过对象(Object)或Map对象来实现的。对象是一种无序的键值对集合,而Map对象则是一种有序的键值对集合。
hasOwnProperty
、Object.keys
等方便操作。size
、clear
、delete
、has
、get
、set
等。const obj = {
key1: 'value1',
key2: 'value2'
};
console.log(obj.key1); // 输出: value1
console.log(obj['key2']); // 输出: value2
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}: ${obj[key]}`);
}
}
const map = new Map();
map.set('key1', 'value1');
map.set('key2', 'value2');
console.log(map.get('key1')); // 输出: value1
console.log(map.has('key2')); // 输出: true
for (const [key, value] of map) {
console.log(`${key}: ${value}`);
}
原因:对象的键会被自动转换为字符串。
解决方法:使用Map对象,因为Map对象的键可以是任何类型。
const obj = {};
obj[1] = 'value1'; // 键会被转换为字符串'1'
console.log(obj); // 输出: { '1': 'value1' }
const map = new Map();
map.set(1, 'value1'); // 键可以是数字
console.log(map); // 输出: Map { 1 => 'value1' }
原因:对象的属性遍历顺序在ES6之前是不固定的,ES6之后虽然有一定的顺序保证,但仍然不如Map对象稳定。
解决方法:使用Map对象,因为Map对象保持插入顺序。
const obj = {
b: 'value2',
a: 'value1'
};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}: ${obj[key]}`); // 输出顺序可能不固定
}
}
const map = new Map();
map.set('b', 'value2');
map.set('a', 'value1');
for (const [key, value] of map) {
console.log(`${key}: ${value}`); // 输出顺序固定
}
领取专属 10元无门槛券
手把手带您无忧上云