最近在学习《深入理解ES6》,例子中有一个Object.keys(obj)方法,如果对这个方法不太熟悉可以看Object.keys()--MDN,MDN的解释非常详细。
Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用
for...in
循环遍历该对象时返回的顺序一致 。如果对象的键-值都不可枚举,那么将返回由键组成的数组。
栗子:// getFoo is a property which isn't enumerable var myObj = Object.create({}, { getFoo: { value: function () { return this.foo; } } }); myObj.foo = 1; console.log(Object.keys(myObj)); // console: ['foo']
看注释有一句which isn't enumerable
,那么
什么是可枚举属性
- 可枚举属性是指那些内部 “可枚举” 标志设置为 true 的属性。对于通过直接的赋值和属性初始化的属性,该标识值默认为即为 true。但是对于通过 Object.defineProperty 等定义的属性,该标识值默认为 false。
- 其中js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等。
- 可枚举的属性可以通过for...in循环进行遍历(除非该属性名是一个Symbol),或者通过Object.keys()方法返回一个可枚举属性的数组。
应用实例可参考这篇文章,链接 --> js中的可枚举属性
网友评论