js中的可枚舉屬性

概念

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

enumerable “隱身術”

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

Object.keys(o)  // ["a", "b", "c"]

JSON.stringify(o // => "{a:1,b:2,c:3}"

上面代碼中,d屬性的enumerablefalse,所以一般的遍歷操作都無法獲取該屬性,使得它有點像“祕密”屬性,但還是可以直接獲取它的值。

細節補充:

1.至於for...in循環和Object.keys方法的區別,在於前者包括對象繼承屬性,而後者只包括對象本身的屬性。

2.如果需要獲取對象自身的所有屬性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法

3.自定義js對象屬性默認的enumerable爲true,除非用Object.defineProperty函數更改屬性特性的值

4.js封裝的基本類型對象的屬性的enumberable爲false,如Object,Number,Array等,具體比如一個js數組的length屬性就是不可枚舉的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章