javascript对象中有一个属性分为可枚举和不可枚举,简单来说如果这个对象能够被for ... in 遍历到,那么这个对象就是可枚举,具体来说如果一个属性的enumerable为false,就是不可枚举,下面三个操作不会取到该属性。(所以判断是否枚举只需要看enumerable的值)
* for..in循环
* Object.keys方法
* JSON.stringify方法
enumerable “隐身术”
var o = {a:1, b:2}
o.c=3
Object.defineProperty(o, 'd', {
value: 4,
enumerable: false
})
console.log(o.d) // 4
for (let i in o) {
console.log(o[i])
}
// 1 2 3
Object.keys // ['a','b','c']
JSON.stringify // "{a:1,b:2,c:3}"
如果enumerable改为true那么就可以这三个方法都可以获取,如果为false可以获取对象的值但是无法遍历到,至于for...in
循环和Object.keys
方法的区别,在于前者包括对象继承自原型对象的
属性,而后者只包括对象本身的
属性。如果需要获取对象自身的所有属性,不管enumerable的值,可以使用Object.getOwnPropertyNames
方法