├── 对象的扩展
│ ├── 属性的简洁表示法
│ │ └─ 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
│ ├── 属性名表达式
│ │ └─ 方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。
│ ├── 方法的 name 属性
│ │ └─ 函数的`name`属性,返回函数名。对象方法也是函数,因此也有`name`属性。
│ │ └─ 如果对象的方法使用了取值函数(`getter`)和存值函数(`setter`),则`name`属性不是在该方法上面,而是该方法的属性的描述对象的`get`和`set`属性上面,返回值是方法名前加上`get`和`set`。
│ ├── 属性的可枚举性和遍历
│ │ └─ 可枚举性
│ │ └─ 对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。`Object.getOwnPropertyDescriptor`方法可以获取该属性的描述对象。
│ │ └─ `toString`和`length`属性的`enumerable`都是`false`,因此`for...in`不会遍历到这两个继承自原型的属性。
│ │ └─ 属性的遍历
│ │ └─ `for...in`循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
│ │ └─ `Object.keys`返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。
│ │ └─ `Object.getOwnPropertyNames`返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。
│ │ └─ `Object.getOwnPropertySymbols`返回一个数组,包含对象自身的所有 Symbol 属性的键名。
│ │ └─ `Reflect.ownKeys`返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
│ ├── super 关键字
│ │ └─ 我们知道,`this`关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字`super`,指向当前对象的原型对象。
│ ├── 对象的扩展运算符
│ │ └─ 解构赋值
│ │ └─ 对象的解构赋值用于从一个对象取值,相当于将目标对象自身的所有可遍历的(enumerable)、但尚未被读取的属性,分配到指定的对象上面。所有的键和它们的值,都会拷贝到新对象上面。
│ │ └─ 解构赋值 对象`o3`复制了`o2`,但是只复制了`o2`自身的属性,没有复制它的原型对象`o1`的属性。
│ │ └─ 扩展运算符
│ │ └─ 对象的扩展运算符(`...`)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。
│ │ └─ 扩展运算符的参数对象之中,如果有取值函数`get`,这个函数是会执行的。
│ ├── AggregateError 错误对象
│ │ └─