JS对象的可枚举属性和不可枚举属性
昨天在写⽂章(转载)的时候发现了有些对象的⽅法是分可枚举性和不可枚举性的。
简单的查了⼀下资料,今天来捋⼀捋啥是对象的可枚举啥是不可枚举。
可枚举性:
对象的每⼀个属性都有⼀个描述对象,⽤来描述和控制该属性的⾏为,⽤OwnPropertyDescriptor⽅法来获取该描述对象(⽤Object.defineProperty⽅法来设置)。
    然后这个Object.defineProperty的⽅法不是vue双向数据绑定的原理吗!!下次再说…
    描述对象的enumerable属性,称为”可枚举性“,如果该属性为false,就表⽰某些操作会忽略当前属性。
 let obj ={ start:'123'};
console.OwnPropertyDescriptor(obj,'start'))
// 输出内容:
configurable:true
enumerable:true
value:"123"
writable:true
下⾯,我们分别介绍下对象属性的描述对象的4个属性:
3.writable: 能否修改属性的值,如果直接使⽤字⾯量定义对象,默认值为true
4.value: 该属性对应的值,默认为undefined
经过以上的⼀些操作,我还是不是很真切的理解可枚举性。那就举⼀个例⼦
let obj ={};
Object.defineProperties(obj,{
name:{
value:'祖宗',
enumerable:false,//不可枚举
},
age:{
value:88,
enumerable:true,//可枚举
}
})
for(let key in obj){
console.log("key:"+ key +','+'value:'+ obj[key])
}
只有可枚举的内容被for in 循环出来了
有没有感觉清晰了很多!!
(在这⾥感谢⼤佬提点!)
这就是个属性,如果false遍历就拿不到了,true遍历就能拿到了…(研究完了发现超简单诶。尴尬)
⽬前,有四个操作会忽略enumerable为false的属性。
for…in循环:只遍历对象⾃⾝的和继承的可枚举的属性。
js获取json的key和valueObject.keys():返回对象⾃⾝的所有可枚举的属性的键名。
JSON.stringify():只串⾏化对象⾃⾝的可枚举的属性。
Object.assign(): 忽略enumerable为false的属性,只拷贝对象⾃⾝的可枚举的属性。
然后明⼉写原⽣js实现vue中的双向数据绑定~~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。