# 对象理解
## 一、属性类型
### 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)