obj.age和obj[‘age’]
- obj.age在底层会转化成object[‘age’],所以不能写成obj.key,应该写成obj[key]
对象属性的操作
let obj = {
name: '',
data: {
age: 18
}
}
- 增加属性
obj.sister = ‘anier’
Object.assign(obj.data, {sex: ‘man’}) - 修改属性
obj.name = ‘tom’
Object.assign(obj.data, {age: 20}) - 删除属性
Reflect.deleteProperty(obj, ‘name’) - 判断是否是自身属性
obj.hasOwnProperty(‘name’) - 判断是否有某属性,包括原型链上的(同’in’运算符一样的作用)
Reflect.has(obj, ‘name’)
修改和定义属性描述符
- Object.defineProperty(obj, prop, descriptor)
let obj = {
_age: 3
};
<!-- 数据属性 -->
Object.defineProperty(obj, 'name', {
configurable: false, // 能否通过 delete 删除属性,能否修改属性的特性,能否把属性修改为访问器属性。
enumerable: false, // 能否通过 for-in 循环返回属性。
writable: true, // 能否修改属性的值
value: '张三' // 这个属性的数据值。
})
<!-- 访问器属性 -->
Object.defineProperty(obj, 'age', {
configurable: true,
enumerable: true,
get: function () {
return this._age;
},
set: function (newValue) {
if (newValue > 5) {
this._age += newValue;
} else {
this._age = newValue;
}
}
})