js對象中什麼是可枚舉性(enumerable)?

引言

說到枚舉,可能不少人都會想到枚舉類型,但在javascript對象中有一個屬性爲可枚舉性,他是什麼呢?javascript

概念

可枚舉性(enumerable)用來控制所描述的屬性,是否將被包括在for...in循環之中。具體來講,若是一個屬性的enumerable爲false,下面三個操做不會取到該屬性。
* for..in循環
* Object.keys方法
* JSON.stringify方法java

enumerable 「隱身術」

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屬性的enumerablefalse,因此通常的遍歷操做都沒法獲取該屬性,使得它有點像「祕密」屬性,但仍是能夠直接獲取它的值。code

至於for...in循環和Object.keys方法的區別,在於前者包括對象繼承自原型對象的屬性,然後者只包括對象自己的屬性。若是須要獲取對象自身的全部屬性,無論enumerable的值,能夠使用Object.getOwnPropertyNames方法對象

來自 搞起博客blog

相關文章
相關標籤/搜索