es6 数据类型Map.Set.Symbol

### es6 数据类型

##### map 数据类型 ===>Map 对象保存键值对。
>用途 :
> * Object的key无法支持该数据时 
> * 需要了解对象大小时

- map 数据类型任何值(对象或者原始值) 都可以作为一个键。 Object 的键只能是字符串

```javascript
let myMap = new Map();
let myMap1 = new Map();
var keyString = 'a string';
var keyObj = { a: 1 };
myMap.set(keyString, "和键'a string'关联的值");
myMap1.set(keyObj, '和键 keyObj 关联的值');
console.log(myMap1.get(keyObj)); //和键 keyObj 关联的值
console.log(myMap); //Map {'a string' => "和键'a string'关联的值"}
console.log(myMap1); //Map {'a string' => "和键'a string'关联的值"}
console.log(myMap1.size); //1
```

- 键值对个数可以从 size 属性获取, Object 的键值对个数只能手动计算。
  ```javascript
  //map对象遍历 for of
  for (const [key, value] of myMap1) {
    console.log(key + ' = ' + value); //[object Object] = 和键 keyObj 关联的值
  }
  ```
- map 对象转 Array array 转 map

  ```javascript
  var kvArray = [
    ['key1', 'value1'],
    ['key2', 'value2'],
  ];
  var myMap2 = new Map(kvArray);
  var myMap3 = new Map(myMap2); //克隆
  console.log(myMap2); //Map(2) {'key1' => 'value1', 'key2' => 'value2'}
  console.log(Array.from(myMap2)); //[["key1", "value1"], ["key2", "value2"]]
  console.log(myMap2 === myMap3); //false
  ```

##### Set 对象

- 存储任何类型的唯一值,无论是原始值或者是对象引用。

```javascript
let mySet = new Set();
mySet.add(1);
mySet.add('some text');
mySet.add({ name: 'xx' });
console.log(mySet); //Set(3) {1, 'some text', {name:xx}}
```

- 数组转 set 类型 --->用途进行数组去重

```javascript
console.log(
  new Set([
    ['key1', 'value1'],
    ['key2', 'value2'],
    ['key2', 'value2'],
  ])
); // Set(3) {Array(2), Array(2), Array(2)}
console.log(new Set(['value1', 'value2', 'value2'])); //{'value1', 'value2'}
```

- set 转 Array 扩展运算符

```javascript
console.log([...new Set(['value1', 'value2', 'value2'])]); //['value1', 'value2']
```

##### Symbol 原始数据类型 表示独一无二的值

> 在之前,对象的键以字符串的形式存在,所以极易引发键名冲突,Symbol 最大的用法是用来定义对象的唯一属性名,为了解决属性名冲突的问题,模拟私有属性

- 我们在不了解一个对象的时候,想为其添加一个方法或者属性,又怕键名重复引起覆盖的问题,而这个时候我们就需要一个唯一性的键来解决这个问题
- 没有完全相等的 Symbol

```javascript
//使用Symbol("a")直接创建,所以该Symbol("a")不在全局注册表中
let obj = {
  a: 1,
  b: 2,
};
let a = Symbol('a');
let b = Symbol('a');
obj[a] = 3;
console.log(obj); //{a: 1, b: 2, Symbol(a): 3}
console.log(obj[a]); //3
console.log(b); //Symbol(a)
console.log(a === b); //false
```

- 全局共享 Symbol
  ``` javascript
  //通过 Symbol.for()方法,参数为创建时传入的描述字符串,该方法可以遍历全局注册表中的的 Symbol,如果没有搜索到,就会创建一个新的 Symbol。
  let c = Symbol.for(1)
  let d = Symbol.for('c')
  console.log(c===d) //true
  ```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值