1. 程式人生 > >js物件的可列舉性

js物件的可列舉性

引言

說到列舉,可能很多人都會想到列舉型別,但在javascript物件中有一個屬性為可列舉性,他是什麼呢?

概念

可列舉性(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
// 4for
(var key in o ) console.log( o[key]);// 1// 2// 3Object.keys(o)// ["a", "b", "c"] JSON.stringify(o // => "{a:1,b:2,c:3}"

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

至於for...in迴圈和Object.keys方法的區別,在於前者包括物件繼承自原型物件的屬性,而後者只包括物件本身的屬性。如果需要獲取物件自身的所有屬性,不管enumerable的值,可以使用Object.getOwnPropertyNames

方法