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); }