博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6学习笔记三
阅读量:5142 次
发布时间:2019-06-13

本文共 4314 字,大约阅读时间需要 14 分钟。

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直接修改数据本身,它只是引用,要是不确定的话,要用forEach来循环}

 

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()!其它的查也是has(),删也是delete()!!!!

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的对比

增、删、改、查

map与数组比较

{    // 数据结构横向对比,增,查,改,删    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);}

 set与数组比较

{    let set=new Set();    let array=[];    // 增    set.add({t:1});    array.push({t:1});    console.info('set-array',set,array);    //查    let set_exist=set.has({t:1});    let array_exist=array.find(item=>item.t);    console.info('set-array',set_exist,array_exist);    //改    set.forEach(item=>item.t?item.t=2:'');    array.forEach(item=>item.t?item.t=2:'');    console.info('map-array-modify',set,array);    //删    set.forEach(item=>item.t?set.delete(item):'');    let index=array.findIndex(item=>item.t);    array.splice(index,1);    console.info('map-array-empty',set,array);}

set、map与对象比较

{    let item={
't':1}; let set=new Set(); //唯一性时考虑 let map=new Map(); //优先考虑 let obj={}; //增 set.add(item); map.set('t',1); obj['t']=1; console.log('map-set-obj',obj,map,set); // 查 console.info({ map_exist:map.has('t'), set_exist:set.has(item), obj_exist:'t' in obj }) // 改 map.set('t',2); item.t=2; //set直接修改数据类型 obj['t']=2; console.log('map-set-obj-modify',obj,map,set); // 删除 map.delete('t'); set.delete(item); delete obj['t']; console.log('map-set-obj-empty',obj,map,set);}

 

转载于:https://www.cnblogs.com/qdlhj/p/9912130.html

你可能感兴趣的文章
[转]vs2010编译金山代码
查看>>
数学图形之Boy surface
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
MySQL-定时任务
查看>>
web页面实现指定区域打印功能
查看>>
使用PHP拆分中文字符串的方法(收藏) 小节
查看>>
android系统权限的管理
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
因Window服务器自动更新并重启导致WebSphere服务停止服务故障一例
查看>>
如何开启safari的调试
查看>>
js深拷贝和浅拷贝
查看>>
node.js 基础学习笔记1
查看>>
如何在linux系统中设置静态ip地址
查看>>
二分查找法,折半查找原理
查看>>
DP简单问题联系--最长递增子序列+最长公共子序列等
查看>>
2017-4-18 Zabbix server的安装以及ansible批量部署zabbix agent的工作笔记
查看>>
GridView 动态列上方添加相应的Combox等控件
查看>>