js物件的可列舉性
阿新 • • 發佈:2019-02-20
引言
說到列舉,可能很多人都會想到列舉型別,但在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屬性的enumerable
為false
,所以一般的遍歷操作都無法獲取該屬性,使得它有點像“祕密”屬性,但還是可以直接獲取它的值。
至於for...in
迴圈和Object.keys
方法的區別,在於前者包括物件繼承自原型物件的
屬性,而後者只包括物件本身的
屬性。如果需要獲取物件自身的所有屬性,不管enumerable的值,可以使用Object.getOwnPropertyNames