javascript 对象有三个特征:
可写:writable
可配置:configurable
可枚举:enumerable
下面通过例子来解析他们的作用
首先写一个对象:
列举对象属性的特征
var person = {
name: "hester",
age: 17
}
writable 特征:
getOwnPropertyDescriptor
:
var info = Object.getOwnPropertyDescriptor(person,"name");
console.log(info);
//{"value":"hester","writable":true,"enumerable":true,"configurable":true}
属性设置 writable 为 false 后,不可修改该属性的值
console.log(person.name); // hester
Object.defineProperty(person,"name",{writable:false});
person.name = "jack";
console.log(person.name); // hester
configurable 特征:
Object.defineProperty(person,"name",{configurable:false});
属性设置 configurable 为 false 后:
1. 不可设置 configurable 为 true;
2. 不可设置 enumerable(true 为 false 和 false 为 true 均不可以);
3. 不可设置 writable 由 false 为 true,可设置 writable 由 true 为 false
enumerable 特征:
属性设置 enumerable 为 false 后,不可被枚举出来,比如 for...in 循环等.但是可以访问
for(var p in person){
console.log(p);
} // name,age
Object.defineProperty(person,"name",{enumerable:false});
for(var p in person){
console.log(p);
} // age
console.log(person.name); // hester
检查属性的 enumerable 特征状态
person.propertyIsEnumerable("name"); // false
来源: http://www.jianshu.com/p/904781196f4b