# 對象理解
## 一、屬性類型
### 1. 數據屬性
- [[Configurable]] : 默認值為 true
- [[Enumerable]] : 默認值為 true
- [[Writable]]
- [[Value]]
### 2. 訪問器屬性
- [[Configurable]] : 默認值為 true
- [[Enumerable]] : 默認值為 true
- [[Get]]
- [[Set]]
> Configurable 能否通過 delete 刪除屬性從而重新定義屬性
能否通過 for-in 循環返回屬性
## 對象的遍歷 [參考](https://juejin.im/post/5d48c275f265da03b12032a1?utm_source=gold_browser_extension)
## 二、屬性的CRUD
#### 遍歷自身可枚舉屬性 返回數組
Object.keys() // 屬性鍵 數組
Object.values() // 屬性值 數組
Object.entries() // 鍵值對 數組
#### 遍歷自身可枚舉屬性 和 原型鏈中的屬性
for..in
```
let simpleColors = {
colorA: 'white',
colorB: 'black'
};
let natureColors = {
colorC: 'green',
colorD: 'yellow'
};
Object.setPrototypeOf(natureColors, simpleColors);
Object.keys(natureColors); // => ['colorC', 'colorD']
Object.values(natureColors)
Object.entries(natureColors); // [["colorC", "green"], ["colorD", "yellow"]]
for (let key in natureColors) {
console.log(key)
}
// => ['colorC', 'colorD', 'colorA', 'colorB']
```
> Object.setPrototypeOf() 方法設置一個指定的對象的原型 ( 即, 內部[[Prototype]]屬性)到另一個對象或 null。
### Object.entries() 轉 Map
> Object.entries() 返回的格式與Map構造函數接受的格式完全相同:(key,value)
```
let greetings = {
morning: 'Good morning',
midday: 'Good day',
evening: 'Good evening'
};
let greetingsMap = new Map(Object.entries(greetings));
greetingsMap.get('morning'); // => 'Good morning'
greetingsMap.get('midday'); // => 'Good day'
greetingsMap.get('evening'); // => 'Good evening'
```
普通對象 不是Iterators 不能使用for...of,通常
```
for (let item of Object.entries(greetings)) {
console.log(key)
}
```
Map提供了與Object.values()和Object.entries() 等效的方法(只是它們返回Iterators),以便為Map實例提取屬性值或鍵值對:
1. Map.prototype.values() 等價于Object.values()
2. Map.prototype.entries() 等價于Object.entries()
```
// ...
[...greetingsMap.values()];
// => ['Good morning', 'Good day', 'Good evening']
[...greetingsMap.entries()];
// => [ ['morning', 'Good morning'], ['midday', 'Good day'],
// ['evening', 'Good evening'] ]
```
> greetingsMap.values()和greetingsMap.entries()返回迭代器對象。若要將結果放入數組,擴展運算符…是必要的
## 創建對象的七種方法
## 參考文檔
【1】[標準庫—Object 對象-阮一峰](https://mp.weixin.qq.com/s/wuuhbr1OByq85OTgP2XbtA)