### 对象的扩展
1. 对象字面量声明形式增加了属性名表达式 let obj = { [ 'a' + 'b' ]: 3 }
2. 如果属性名表达式的结果是一个对象,则值会成为 ‘[ object Object ]’,
3. 增加了函数的name属性,为函数的名称
4. 增加了super关键字,表示原型对象,只能用在对象方法中( let obj = { fn(){} } ),用在其它地方都会报错
5. 增加了对象的解构赋值,解构赋值是浅拷贝,只能解构自身的属性,不能解构继承的属性
let {x, ...y} = { x:1, c: 2 }
6. ... 扩展运算符,将参数对象所有的可遍历属性,拷贝到新对象之中,相当于Object.assign()
let obj = { ...obj1 } || let obj = { ...{x: 2} }
...(x > 1 ? {a: 1} : {}) 也可以跟表达式
7. 对象的每个属性都有属性描述符 Descriptor
```
let obj = { foo: 123 };
Object.getOwnPropertyDescriptor(obj, 'foo')
{
value: 123,
writable: true, //值是否可修改
enumerable: true, //可枚举
configurable: true //是否可删除
get(){}
set(){}
}
```
### 对象的方法扩展
1. Object.is() Object.is(NaN, NaN) true / Object.is(+0, -0) false
2. Object.getOwnPropertyDescriptor( obj, 'a' ) 获取对象属性的描述对象
3. Object.getOwnPropertyDescriptors( obj )
4. Object.setPrototypeOf( obj, prototype ) 设置obj对象的原型对象,与__proto__效果一样,这是ES6推荐的原型对象
设置方式
5.Object.keys() 返回对象自身可遍历的属性名为集合的数组 (会过滤Symbol属性)
6.Object.values() 返回对象自身可遍历的属性值为集合的数组,如果属性名是数字,则会根据属性名的大小顺序
来进行排列,返回对象的属性值, (会过滤Symbol值)
7.Object.entries() 返回对象返回的键值对组成的二维数组 [ [a: 1], [b: 2] ]
8.Object.fromEntries() 是Object.entries的逆操作,用于将键值对数组转换为对象