ES6学习--对象属性的可枚举性( enumerable)
可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之中。具体来说,如果一个属性的enumerable为false,下面三个操作不会取到该属性。
* for..in循环 :只遍历对象自身的和继承的可枚举的属性
* Object.keys方法 :返回对象自身的所有可枚举的属性的键名
* JSON.stringify方法:只串行化对象自身的可枚举的属性
* Object.assign()(ES6):只拷贝对象自身的可枚举的属性
这四个操作之中,只有for...in会返回继承的属性。至于for...in循环和Object.keys方法的区别,在于前者包括对象继承自原型对象的属性,而后者只包括对象本身的属性。如果需要获取对象自身的所有属性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法
例子:
var o = {a:1, b:2};
o.c = 3;
Object.defineProperty(o, 'd', {
value: 4,
enumerable:false
});
o.d
// 4
for( var key in o ) console.log( o[key] ); // 遍历获取对象的属性值
// 1// 2
// 3
