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