在属性相关的操作中,枚举只影响for-in循环和Object.keys()(也会影响JSON.stringify())
for-in循环遍历所有可枚举的属性,包括继承和自己的属性
ObjecT.keys()返回所有自有(不包括继承的)可枚举的属性
如果你要想得到所有自有属性的键(不管是否可枚举),需要使用Object.getOwnPropertyNames()
var obj=Object.defineProperties({},{foo:{value:4,enumerable:true}});
console.log(getOwnPropertyNames.apply(Object,obj));//foo
for(var i in obj) console.log(i);//foo
console.log(Object.keys(obj));//foo
把enumerable改为false:
var obj=Object.defineProperties({},{foo:{value:4,enumerable:false}});
console.log(getOwnPropertyNames.apply(Object,obj));//foo
for(var i in obj) console.log(i);//没有输出
console.log(Object.keys(obj));//没有输出