js对象遍历属性

答案:JavaScript中遍历对象属性的方法有多种,需根据是否遍历继承属性、可枚举性及Symbol类型来选择。1. for...in循环可遍历自身和继承的可枚举属性,配合hasOwnProperty可过滤继承属性;2. Object.keys()返回自身可枚举的字符串键数组,不包含继承属性和Symbol键;3. Object.values()获取自身可枚举属性值;4. Object.entries()返回键值对数组,支持解构,适合同时使用键和值;5. Object.getOwnPropertyNames()包含自身所有属性名,包括不可枚举属性,但不包括Symbol;6. Object.getOwnPropertySymbols()专门获取Symbol类型属性;7. Reflect.ownKeys()最全面,包含所有自身属性键(字符串、Symbol、可枚举与不可枚举)。日常开发中常用Object.keys和for...in,处理复杂场景时推荐Object.entries和Reflect.ownKeys。

在JavaScript中,遍历对象的属性有多种方式,具体选择取决于你的需求,比如是否需要遍历可枚举属性、是否包括继承属性、是否处理Symbol类型等。以下是几种常用的方法:

1. for...in 循环

作用:遍历对象自身和继承的可枚举属性(包括字符串键和数字键)。

注意:不推荐用于数组,适合普通对象。

const obj = { a: 1, b: 2 };
for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]);
  }
}

使用 hasOwnProperty 可以过滤掉继承属性。

2. Object.keys()

作用:返回对象自身所有可枚举的字符串键属性名组成的数组。

适合用于只关心自有属性的场景。

Object.keys(obj).forEach(key => {
  console.log(key, obj[key]);
});

不会包含继承属性,也不会包含Symbol键。

3. Object.values()

获取对象自身所有可枚举属性的值。

Object.values(obj).forEach(value => {
  console.log(value);
});

4. Object.entries()

返回键值对数组,适合同时使用键和值。

Object.entries(obj).forEach(([key, value]) => {
  console.log(key, value);
});

支持解构,代码更清晰。

5. Object.getOwnPropertyNames()

获取对象自身所有属性名,包括不可枚举属性(但不包括Symbol)。

Object.getOwnPropertyNames(obj).forEach(key => {
  console.log(key);
});

比 Object.keys() 更全面,包含不可枚举属性。

6. Object.getOwnPropertySymbols()

获取对象自身的Symbol类型属性。

const sym = Symbol('test');
obj[sym] = 'symbol value';
Object.getOwnPropertySymbols(obj).forEach(sym => {
  console.log(sym, obj[sym]);
});

7. Reflect.ownKeys()

返回对象自身所有属性键,包括字符串、Symbol、可枚举和不可枚举的。

Reflect.ownKeys(obj).forEach(key => {
  console.log(key, obj[key]);
});

最完整的遍历方式,推荐用于需要全面访问属性的场景。

基本上就这些方法,根据实际需求选择即可。日常开发中,Object.keys 和 for...in 最常用,处理现代数据结构时可以优先考虑 Object.entries 和 Reflect.ownKeys。