对象上可枚举属性与不可枚举属性及遍历
区别属性是否可枚举:属性的enumerable设置,如果为true,则是可枚举,否则不可枚举
如何创建
一般来说在构造函数里面声明的属性是可枚举属性
function fn(a,b){
this.a = a;
this.fn = function (){
console.log(b);
}
}
var tmp = new fn(1,2);
for(let i in tmp){
console.log(i);
}
要构造不可枚举属性,可以采用Object.defineProperty方法
Object.defineProperty(fn,'sex',{
value:'女',
enumerable:false
});
这样声明出来的属性不能直接打印出来
如何遍历
这里要考虑是否能遍历原型链上的属性
- for…in 自身可枚举属性,原型链上的属性
- Object.keys() 自身可枚举属性,不含原型链,返回数组
- JSON.stringify() 自身可枚举属性,不含原型链,并序列化为JSON对象
- Object.getOwnPropertyNames() 自身可枚举和不可枚举属性,不含原型链
还有一个函数object.hasOwnProperty(param),判断param属性是不是自身的属性,如果是则返回true,如果不是,或者是原型链上的,返回false。(不可枚举属性也能判断出来,返回结果为true)
如有错误,请指出。
内容参考了网上部分博客,截图来源黑马程序员前端视频教程。