JavaScript对象的属性有两类:数据属性和访问器属性
数据属性
数据属性有四个特性,分别为:
- [[value]]属性的值
- [[writeable]]属性是否可以修改
- [[enumerable]]属性是否可枚举
- [[configurable]]属性是否可配置,包括是否可删除,是否可修改属性的特性,是否可修改为访问器属性
通过一般方式默认的特性为undefined,true,true,true。通过defineProperty方式默认的特性为undefined,false,false,false。
注:如果通过defineProperty的操作未明确指定configurable为true,则属性的操作将受到限制(包括不能被修改,不能被删除,不能修改特性,不能修改为访问器属性)
访问器属性
访问器属性有四个特性,分别为:
- [[get]]属性的值
- [[set]]属性是否可以修改
- [[enumerable]]属性是否可枚举
- [[configurable]]属性是否可配置,包括是否可删除,是否可修改属性的特性,是否可修改为数据属性
通过一般方式默认的特性为undefined,undefined,true,true。通过defineProperty方式默认的特性为undefined,undefined,false,false。
注:如果通过defineProperty的操作未明确指定configurable为true,则属性的操作将受到限制(包括不能被修改,不能被删除,不能修改特性,不能修改为数据属性)
定义属性:
Object.defineProperty(对象,属性名称,属性描述符)
获取属性特性(属性描述符)
Object.getOwnProperyDescriptor(对象,属性名称)
自身属性
通过getOwnPropertyNames可以获取自身属性包括可枚举和不可枚举
for..in或者Object.keys可以获取自身以及原型链上的可枚举属性,然后通过hasOwnProperty可以获取自身的可枚举属性
参考:
- JavaScript高级程序设计6.1理解对象
- nodejs包merge-descriptors