# 1.1 了解对象的属性

# 什么是属性类型

属性类型实际上就是用来描述对象属性的,换句话说就是属性的属性。

是一个内部值,是给 JavaScript 引擎用的。

表示方式:[[属性类型]]

# 属性的分类:数据属性+访问器属性

在 ECMAScript 中有两种类型的属性:数据属性和访问器属性

如果你不知道一个属性到底是访问器属性还是数据属性,你可以通过:

Object.getOwnPropertyDescriptor(对象,属性)查看

每种属性都会有4 种特性:

  • ​ [[Configurable]]:

    两个作用:

    1. 这个属性能不能通过 delete 删除
    2. 该属性是否能转换成访问器类型
  • [[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)