您的当前位置:首页正文

Symbol作为属性名的遍历

来源:花图问答

Symbol作为属性名。该属性不会出现在for...in ,for...of 循环中,也不会被Object.keys() 和
Object.getOwnPropertyNames() 返回。但是它不是私有属性,有一个方法Object.getOwnPropertySymbols()可以获取指定对象的所有Symbol属性名。

Object.getOwnPropertySymbols()方法返回一个数组,数组每项是当前对象的所有用作属性名的Symbol值。

var obj = {};
var a = Symbol('a');
var b = Symbol('b');

obj[a] = 'kon';
obj[b] = 'chan';

var objectSymbols = Object.getOwnProperySymbols(obj);

objectSymbols
//[Symbol(a),Symbol(b)]

有一个新的API ------ Reflect.ownKeys方法可以返回所有类型的键名

let obj = {
  [Symbol('my_key')]:1,
  enum:2,
  nonEnum:3
};

Reflect.ownKeys(obj)
//[Symbol(my_key),'enum','nonEnum']

补充Object.keys() 和Object.getOwnPropertyNames()方法

摘录自: