1. Object.defineProperty()
var myObj = {}
Object.defineProperty(myObj,"a",{
value:3, //属性值
writable:true, //可写
enumerable:true, //可枚举
configurable:true //可配置
})
console.log(myObj) //{a:3}
可以在添加属性的时候,对对应的属性进行特性设置。
注意点:
- 把configurable设置成false是单向操作,无法撤销。(true->false:不报错。false->true:报错。)
var obj = {
a:2
}
true -> false:不报错
Object.defineProperty(obj,"a",{
configurable:true
})
Object.defineProperty(obj,"a",{
configurable:false
})
false -> true:报错
Object.defineProperty(obj,"a",{
configurable:false
})
Object.defineProperty(obj,"a",{
configurable:true
})
- 即使是属性configurable:false,也可以将writable的状态由true设置成false,但是不能将false设置成true。
不报错情况:
Object.defineProperty(obj,"a",{
writable:true
})
Object.defineProperty(obj,"a",{
configurable:false
})
Object.defineProperty(obj,"a",{
writable:false
})
报错情况:
Object.defineProperty(obj,"a",{
writable:false
})
Object.defineProperty(obj,"a",{
configurable:false
})
Object.defineProperty(obj,"a",{
writable:true
})
3.关于设置一个对象不可更改juejin.cn/post/710763…
查找对象身上的属性
- in:会查找对象原型链上属性。
- Object.keys():只展示可以枚举的属性。不会找原型链。
- Object.getOwnPropertyNames():返回对象身上的所有属性,无论是不是可以枚举。不会找原型链。
- Object.hasOwnProperty():判断对象是不是包含该属性,不会找原型链。