对象属性的操作
let obj = {
name: "ziu",
age: 18
}
console.log(obj.name) // 获取属性
obj.name = "ziuc" // 给属性赋值
obj.height = 1.88 // 增加属性
delete obj.name // 删除属性
// 遍历对象中所有的key
for(let key in obj) {
console.log(key)
}
defineProperty
直接定义在对象内部的属性,没有办法对其进行更详细的设置如:属性是否允许被赋值、属性是否可以被delete删除、在for-in遍历时是否可以被遍历。
这时可以用属性描述符,精准的添加或修改对象的属性。
属性描述符用Object.defineProperty()
对属性进行添加或修改。
Object.defineProperty(obj, prop, descriptor)
obj
:要定义属性的对象prop
:要定义或者修改的属性名称或Symbol
descriptor
:要定义或修改的属性描述符
Object.defineProperty(obj, "name", {}) // edit Existing properties
Object.defineProperty(obj, "height", {}) // create new property and edit
与defineProperties的区别
出现报错:Property description must be an object.
注意区分Object.defineProperty(obj, prop, descriptor)
和Object.defineProperties(obj, props)
Object.defineProperty(obj, "name", {value: "ziu"}) // Object.defineProperty
Object.defineProperties(obj, { // Object.defineProperties
"name": {
value: "ziu",
writable: false
},
"address": {
value: "Beijing",
writable: true
}
})