1. for...in 循环
用法:
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]);
}
}
说明:
- 遍历对象自身和原型链上的可枚举属性。
- 需要配合hasOwnProperty() 检查避免遍历原型链上的属性。
- 遍历顺序不是按照定义的顺序,而是按照规范输出。
- 不能遍历Symbol属性
2. Object.keys() + forEach()
用法:
Object.keys(obj).forEach(key => {
console.log(key, obj[key]);
});
说明:
- 通过返回键来访问对象的键和值
- 只遍历自身的可枚举属性。
- 不遍历Symbol属性。
3. Object.values()
用法:
Object.values(obj).forEach(value => {
console.log(value);
});
说明:
- 直接返回值,
- 不包含键信息,不遍历 Symbol 属性
4. Object.entries()
用法:
Object.entries(obj).forEach(([key, value]) => {
console.log(key, value);
});
说明:
- 同时获取键值对;
- 需要处理键值对的场景,这种方式更方便。
5. Object.getOwnPropertyNames()
用法:
Object.getOwnPropertyNames(obj).forEach(key => {
console.log(key, obj[key]);
});
注意:
- 返回对象自身不包含Symbol的所有属性,包括不可枚举属性。
javas
6. Reflect.ownKeys()
用法:
Reflect.ownKeys(obj).forEach(key => {
console.log(key, obj[key]);
});
说明:
- 返回对象自身的是所有键,包含Symbol和不可枚举属性。
for...of + Object.keys()
for (let key of Object.keys(obj)) {
console.log(key, obj[key]);
}
说明:
- 不遍历Symbol
- 可以使用
break和continue