ES6学习笔记三

1、Symbol

ES5 的对象属性名都是字符串,这容易造成属性名的冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。

 {
     //声明
     let a1=Symbol();
     let a2=Symbol();
     console.log(a1===a2)  //false,生成的a1跟a2都是独一无二
     let a3=Symbol.for('a3');  //Symbol.for()里面有key时,先全局搜索一下,有的话就直接赋值,没有的话就生成一个a3的变量
     let a4=Symbol.for('a3');
     console.log(a3===a4);   //true    
 }

 // 应用场景
 {
     let a1=Symbol.for('abc');
     let obj={
         [a1]:'123',
         'abc':345,
         'c':456
     }
     console.log("obj",obj)   //{abc:'123',Symbol('abc'):345,c:456}
 }

2、数据结构

Set-Map数据结构

知识点1:set集合

add()新增

{
    let list = new Set();
    list.add(5);
    list.add(7);
    console.log('size',list.size);   // 2 size计算长度
}
{
    let list = new Set();
    list.add(1);
    list.add(2);
    list.add(1);
    console.log('list',list);  //list Set(2) {1, 2}
}

应用场景去重,但是不做数据类型转换!!

// 应用场景去重
{
    let arr=[1,2,3,4,1,2];
    let list=new Set(arr); 

    console.log('unique',list);  //1,2,3,4

}
//set去重不做数据类型转换
{
    let arr2=[1,2,3,4,1,'2'];
    let list2=new Set(arr2); 

    console.log('unique',list2);  //1,2,3,4,'2'

}

Set的几个方法 (add,delete,clear,has

{
    let arr=['add','delete','clear','has'];
    let list=new Set(arr);

    console.log('has',list.has('add'));  //ture  是否存在这个元素
    console.log('delete',list.delete('add'),list);  //Set(3) {"delete", "clear", "has"}  //删除某个元素
    list.clear();   //Set(0) {}   清空元素
    console.log('list',list); //Set(0) {} 

}

Set遍历的方法(其中val值跟key值相同)

{
    let arr=['add','delete','clear','has'];
    let list=new Set(arr);
    for(let key of list.keys()){
        console.log('keys',key);
    }
    for(let value of list.values()){
        console.log('values',value);
    }
    for(let [key,value] of list.entries()){
        console.log('entries',key,value);
    }
    list.forEach(function(item){console.log(item);})
}

weakSet 和set支持的数据对象不同。weakSet必须是对象,其它不支持。是弱引用

3、Map()数据结构

map()跟set()的区别是map的key值可以是任何数据类型,而set的key值类型只能是字符串。set添加字符串的方法是add(),而map添加属性的方法是set()。获取的方法是get()!

map的定义方式1,不带参数

{
    let map = new Map();
    let arr=['123'];
    map.set(arr,456);
    console.log('map',map,map.get(arr));   //Map(1) {Array(1) => 456} 456
}

map的定义方式2,带参数

{
    let map = new Map([['a',123],['b',456]]);  //注意格式
    console.log('map args',map);  //map args Map(2) {"a" => 123, "b" => 456}
    console.log('size',map.size); //里面元素个数
    console.log('delete',map.delete('a'),map); 
    console.log('clear',map.clear(),map); 
}

4、数据结构Map跟Set与数组array跟对象Object的对比

增、删、改、查

{
    // 数据结构横向对比,增,查,改,删
    let map=new Map();
    let array=[];
    //
    map.set('t',1);
    array.push({t:1});

    console.info('map-array',map,array) //map-array Map(1) {"t" => 1} [{t,1}]

    //
    let map_exist=map.has('t');
    let array_exist=array.find(item=>item.t);
    console.info('map-array',map_exist,array_exist);

    //
    map.set("t",2);
    array.forEach(item=>item.t?2:'');
    console.info('map-array-modify',map,array);

    //
    map.delete('t');
    let index=array.findIndex(item=>item.t);
    array.splice(index,1);
    console.log('map-array-delete',map,array);
}

猜你喜欢

转载自www.cnblogs.com/qdlhj/p/9912130.html