创建一个对象
var obj = {
"id":"10001",
"name":"吴中生",
"salary": "8000"
}
Object.getOwnPropertyDescriptor()
获取某个对象特定属性的属性描述
ps:获取不存在的属性时会返回undefined
var objId = Object.getOwnPropertyDescriptor(obj,'id');
console.log(objId); //{value: "10001", writable: true, enumerable: true, configurable: true}
默认情况下writable,enumerable,configurable都为true
value 值
对象可以通过.访问其属性值
console.log(obj.id); //10001
writable 可写性
writable为true时我们可以对对象的属性值进行修改操作
obj.id++;
console.log(obj.id); //10002
enumerable 可枚举性
writable为true时我们可以通过for-in遍历对象
for(var key in obj){
console.log(key,obj[key]);
}
结果:
configurable 可配置性
configurable为false时将不可修改其他特性的状态
Object.defineProperty()
会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
Object.defineProperty(obj,'id',{
"writable": false
})
obj.id++;
console.log(obj.id); //10002
将writable设置为flase,这时修改obj的id属性的值是不会成功的
然而这在js中这是不报错的,如果需要排查错误,可以在js中你所需要的部分启用严格模式
"use strict";
Uncaught TypeError:无法分配给对象“#”的只读属性“id”
同时修改多个属性的特性:
Object.defineProperties(obj,{
id: {value: '001',writable: false,enumerable: true,configurable: false},
name: {value: '吴中生友',writable: false,enumerable: true,configurable: false},
salary: {value: '8888',writable: false,enumerable: true,configurable: false}
});
console.log(obj); //{id: "001", name: "吴中生友", salary: "8888"}