Web前端必做笔记之一:JavaScript中对象属性的描述,可枚举,可配置,可重写
<script>
//可枚举,不可枚举
const student = {
name:"小明",
age:12,
[Symbol("level")]:"优秀",
[Symbol("level")]:"有钱",
}
const val = Object.getOwnPropertyDescriptor(student,"name");
console.log(val);
/*
{
configurable: true //属性是否可以删除
enumerable: true //属性是否可枚举, 可枚举:比如说for...in循环,true,可枚举的就能够遍历到,false,不可枚举就遍历不到
value: "小明" //属性值
writable: true //属性是否可以修改
}
*/
Object.defineProperty(student,"gender",{ //这个方法第一个参数是对象,第二个是属性
configurable: true, //属性是否可以删除
enumerable: true, //属性是否可枚举,
value: "男", //属性值
writable: true //属性是否可以修改
})
console.log(student); //会发现多了个"gender"属性
//如果要删除这个属性那怎么办?
delete student.gender;
</script>
<script>
//当我们把这个configurable改成false
Object.defineProperty(student,"gender",{
configurable: false, //属性是否可以删除
enumerable: true, //属性是否可枚举,
value: "男", //属性值
writable: true //属性是否可以修改
})
delete student.gender;
console.log(student); //就会发现“gender”没有删掉
</script>
<script>
Object.defineProperty(student,"gender",{
configurable: false, //属性是否可以删除
enumerable: true, //属性是否可枚举,
value: "男", //属性值
writable: true //属性是否可以修改
})
student.gender = "女"
console.log(student); //会发现小明变成"女" ,writable改成false,就修改不了。
for(let pro in student){
console.log(pro); //会打印出name, age,gender;当我们把enumerable:false,变成了不可枚举属性,就会发现gender没了。
}
//也就是说,for...in循环找不到不可枚举的数据
</script>
总结:
1. configurable: false, //属性是否可以删除
enumerable: true, //属性是否可枚举,
value: “男”, //属性值
writable: true //属性是否可以修改
2.for…in循环,true,可枚举的就能够遍历到,false,不可枚举就遍历不到