新增数据类型 Set 、Map、Symbol

158 阅读2分钟

数据类型分类:

  • 基本数据类型

    number string boolean   undefined  null  symbol
    
  • 复杂数据类型

    Array   Object  Function  Number String  Boolean  Math   Date   RegExp  Promise  Set      Map
    

    基本新增: symbol

    复杂新增: Set Map

Set是一组key的集合,但不存储value, 而且key不重复,可自动排重。

​
- Set 存储一系列无序数据的集合
=> 特点: 存储的元素不重复 ,可以用来去重
=> 创建方式
let set = new Set()
=> 常用方法及属性
size属性     用来获取该数据结构中有多少数据的
add()      往Set()实例对象里面夹数据
delete()   删除括号里对应数据
clear()    清除所有数据
​
 function test1() {
            // let set = new Set()  //创建空集合
            let set = new Set([100, 'hello', 200, true, {
                name: 'admin'
            }])
            set.add(300)
            console.log('size :', set.size);
            console.log(set);
            set.delete(100)
            console.log(set);
            // set.clear()
            console.log(set);
            set.forEach(item => {
                console.log(item);
            })
            return set.size
​
        }
        test1()

Map 是一组键值对的结构,具有极快的查找速度。

Map
{key:value,key:value}
{name:'admin',age:20}
​
[ ['admin',100],['true',20] ]   前面是key,后面是值,例如 'admin'与100
 function test4(){
            let map = new Map([[true,1],['hello',{name:'admin'}]])
            console.log(map);
            console.log(map.size);
            map.set(100,'200')
            console.log(map.get('hello'));     //得到{name:'admin'}
            console.log( map.has('world') );   //判断是否有'world'
        }
       test4()

Symbol

ES6引入Symbol的原因: ES5的对象属性名都是字符串,很容易造成属性名冲突。 比如,使用了一个他人提供的对象,想为这个对象添加新的方法,新方法的名字就有可能与现有方法产生冲突。 如果有一种机制,保证每个属性的名字都是独一无二的,这样就从根本上防止了属性名冲突。

    //注意,Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。
​
        function test6() {
            let name = Symbol('name')
​
            let obj = {
                name: 'admin',
                age: 20
            }
​
            let name1 = Symbol('name')
            let newObj = {
                num: 1001,
                name1: 'root',
                ...obj
            }
            console.log(newObj);
​
        }
        test6()