属性的可枚举属性:
对象的每一个属性都具有一个描述对象 Descriptor, 用于控制该属性的行为
Object.getOwnPropertyDescriptor 可以获取!
// {
// value: 123,
// writable: true,
// enumerable: true,
// configurable: true
// }
enumerable 可枚举属性
如果是false 表示不可枚举,某些操作会忽略当前属性
- ES5 有三个操作会忽略
- for in:遍历 对象自身+继承 可枚举的属性
- Object.keys(): 返回 对象自身 可枚举属性 的键名
- JSON.stringify() :只串行化 对象自身的 可枚举属性
- ES6 会忽略不可枚举属性的方法
- Object.assign(): 只复制 对象自身 可枚举属性
对象的length 和toString() 的enumerable 是false ,因为for in 不会遍历到这两个
ES6 规定: 所有Class的原型 的方法 都是不可枚举的,也就是都是false
尽量不要使用for in 可以使用 Object.keys() 代替
ES6 一共有5种方法可以遍历 对象的属性:
for..in:-
- 【自身 + 继承】 可枚举属性 不含symbol属性
Object.keys(obj): 返回一个数组-
- 自身 可枚举属性 不含symbol属性
Object.getOwnPropertyName(obj):返回一个数组-
- 自身所有属性(包括不可枚举属性)不含symbol属性
Object.getOenPropertySymbols(obj): 返回一个数组-
- 自身所有的symbol属性
Reflect.ownKeys(obj): 返回一个数组-
- 自身所有属性
先遍历数字排序,然后是字符串的生成时间,然后是生成时间的symbol