乐趣区

关于javascript:js-对象遍历

对象遍历办法总结:

  • for...in:遍历对象本身,蕴含继承,可枚举,不含 Symbol 的属性。
  • Object.keys(obj):遍历对象本身, 不含继承,可枚举,不含 Symbol 的属性。【values,entries】
  • Object.getOwnPropertyNames(obj):遍历对象本身, 不含继承, 不含 Symbol 的属性, 不论是否可枚举
  • Object.getOwnPropertySymbols(obj): 遍历对象本身, 不含继承, 所有 Symbol 的属性, 不论是否可枚举
  • Reflect.ownKeys(obj): 遍历对象本身,不含继承,所有键名,不论是否 Symbol 和可枚举。

    对象其余办法:

  • JSON.stringify():只串行化对象本身,不含继承,可枚举,不含 Symbol 属性。
  • Object.assign():只拷贝对象本身,不含继承,可枚举属性, 不论是否是 Symbol
办法 本身属性 继承属性 可枚举属性 Symbol 属性
for...in.. 必须
Object.keys() 必须
Object.getOwnPropertyNames(obj) 非必须
Object.getOwnPropertySymbols(obj) 非必须
Reflect.ownKeys(obj) 非必须 非必须
JSON.stringify() 必须
Object.assign() 必须 非必须

代码验证

  1. 创立父对象 protoObject 和子对象 myObject:
const protoObject = {
  show_proto: '我是可枚举 - 父',
  [Symbol('symbol_show_proto')]: '我是 Symbol,可枚举 -  父',
};

let myObject = {
  show_my: '我是可枚举',
  [Symbol('symbol_show_my')]: '我是 Symbol,可枚举',
};

Object.defineProperty(myObject, 'hidden_my', {
  value: '我是不可枚举',
  enumerable: false,
});

Object.defineProperty(myObject, Symbol('symbol_hidden_my'), {
  value: '我是 Symbol,不可枚举',
  enumerable: false,
});

Reflect.setPrototypeOf(myObject, protoObject);

2. 查看 protoObject 和 myObject:

3. 遍历:

退出移动版