第一个:value
实际存储属性值
第二个:writable
控制值(value)是否可修改,默认是true可修改的
第三个:enumerable
控制是否可用for in遍历到默认是true,即使不能for in,默认是true;
第四个:configurable
控制是否可以修改其他特性,是否可以删除属性,修改不可逆转默认是true;
注意: configurable为false,在writable为true的情况下,它的特性值是可以改成false的;
获取四大特征
getOwnPropertyDescriptor
var attrs = Object.getOwnPropertyDescriptor(obj, "id");
console.dir(attrs);
1.value值:
var obj = {
id: "1001",
name: "张三",
salary: "10000",
};
Object.defineProperty(obj, "salary",{
value:'12000'
});
console.log(obj.salary);
效果图:
2.writable 控制值(value)是否可修改
var obj = {
id: "1001",
name: "张三",
salary: "10000",
};
Object.defineProperty(obj, "salary",{
writable:false
});
效果图:
3.enumerable
控制是否可用for in遍历
为true的时候
var obj = {
id: "1001",
name: "张三",
salary: "10000",
};
Object.defineProperty(obj, "id", {
enumerable: true,
});
for (var key in obj) {
console.log(key, obj[key]);
}
效果图:
为false的时候
var obj = {
id: "1001",
name: "张三",
salary: "10000",
};
Object.defineProperty(obj, "id", {
enumerable: false,
});
for (var key in obj) {
console.log(key, obj[key]);
}
4.configurable
控制是否可以修改其他特性,是否可以删除属性
修改其他属性时
var obj = {
id: "1001",
name: "张三",
salary: "10000",
};
Object.defineProperty(obj, "id", {
configurable: false,
enumerable: false,
});
Object.defineProperty(obj, "id", {
enumerable: true,
});
for (var key in obj) {
console.log(key, obj[key]);
}
为false,
var obj = {
id: "1001",
name: "张三",
salary: "10000",
};
Object.defineProperty(obj, "id", {
configurable: false,
});
为true时
var obj = {
id: "1001",
name: "张三",
salary: "10000",
};
Object.defineProperty(obj, "id", {
configurable: true,
});