JavaScript中可枚举
枚举是什么?
- 枚举指对象的属性是否可以遍历出来,简单点说就是是否可以被列举出来。可枚举性决定了这个属性能否被for…in查找遍历到。
- js中基本包装类型的原型属性是不可枚举的,比如:
基本包装类型:Boolean,Number和String,就是即是基本类型,也是引用类型。基本包装类型还可以像引用类型一样通过对象的方法访问它自带的一些方法,但是不能像引用类型那样自定义方法。
var num = new Number()
for(var pro in Number){
console.log('num.'+pro+'='+num[pro]);
}
//undefined
结果为空,因为Number中内置的属性是不可枚举的;
枚举的作用?
- 属性的枚举性会影响以下三个函数的结果:
-
for…in
-
Object.keys()
-
JSON.stringify()
- 举例:
function enumer(){
this.mame="我是对象本身就有的属性"
}
enumer.prototype.age="我是通过对象原型挂载的属性"
let fn = new enumer()
Object.defineProperty(fn,'price',{
value:'我是通过Object.defineProperty方法添加的可枚举属性',
enumerable:true
})
- .for…in循环:可以枚举(遍历)出对象本身具有的属性
for(let pro in fn){
console.log(pro);
}
// mame
// price
// age
- Object.keys():不会枚举原型链上的属性
console.log(Object.keys(fn))
// ['mame', 'price']
- JSON.stringify():不会枚举原型链上的属性
console.log(JSON.stringify(fn));
//{"mame":"我是对象本身就有的属性","price":"我是通过Object.defineProperty方法添加的可枚举属性"}
未来的我会感谢现在努力的自己。