### 對象的擴展
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的逆操作,用于將鍵值對數組轉換為對象