# 1.1 了解对象的属性
# 什么是属性类型
属性类型实际上就是用来描述对象属性的,换句话说就是属性的属性。
是一个内部值,是给 JavaScript 引擎用的。
表示方式:[[属性类型]]
# 属性的分类:数据属性+访问器属性
在 ECMAScript 中有两种类型的属性:数据属性和访问器属性
如果你不知道一个属性到底是访问器属性还是数据属性,你可以通过:
Object.getOwnPropertyDescriptor(对象,属性)查看
每种属性都会有4 种特性:
[[Configurable]]:
两个作用:
- 这个属性能不能通过 delete 删除
- 该属性是否能转换成访问器类型
[[Enumerable]]:
- 这个属性是否能够遍历得到
数据属性特有的:
- [[Value]]:属性的数据,我们对对象属性的读写实际上都是在操作这个特性。默认值为:undefined
- [[Writable]]: 属性的数据能否修改
访问器属性特有的:
- [[Get]]:读取属性值的时候调用。默认值为:undefined
- [[Set]]:设置属性值的时候调用。默认值为:undefined
访问器属性不能直接定义,必须使用 Object.defineProperty()来定义。
参数解释:修改哪个对象的,哪个属性的,哪些个特性
Object.defineProperty()这个方法,如果没有指定configurable、enumerable 和writable 这 3 个特性,那么在调用这个函数的处理过程中,这三个默认值都是 false。
除了标记 undefined 的这3个特性外,剩下的默认值都是 true。
# 数据特性操作的注意事项
一次性定义多个属性,可以使用Object.defineProperties()代替Object.defineProperty()
一旦把属性定义为不可配置的(即[[Configurable]]:false) 就不能再把它变回可配置了(即[[Configurable]]:true)