说到枚举,可能不少人都会想到枚举类型,但在javascript对象中有一个属性为可枚举性,他是什么呢?javascript
可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之中。具体来讲,若是一个属性的enumerable为false,下面三个操做不会取到该属性。
* for..in循环
* Object.keys方法
* JSON.stringify方法java
javascriptvar 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 Object.keys(o) // ["a", "b", "c"] JSON.stringify(o // => "{a:1,b:2,c:3}"
上面代码中,d属性的enumerable
为false
,因此通常的遍历操做都没法获取该属性,使得它有点像“秘密”属性,但仍是能够直接获取它的值。code
至于for...in
循环和Object.keys
方法的区别,在于前者包括对象继承自原型对象的
属性,然后者只包括对象自己的
属性。若是须要获取对象自身的全部属性,无论enumerable的值,能够使用Object.getOwnPropertyNames
方法对象
来自 搞起博客blog