說到枚舉,可能不少人都會想到枚舉類型,但在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