10.1maps
ES6引入了两个非常受欢迎的数据结构:maps和sets。
Map对象它可以将键和值映射起来。
const u1 = {name: 'Cynthia'};const u2 = {name: 'Cynthia'};const u3 = {name: 'Cynthia'};const u4 = {name: 'Cynthia'};//创建mapconst userRoles = new Map();userRoles.set(u1, 'User');userRoles.set(u2, 'User');userRoles.set(u3, 'Admin');//链式调用userRoles.set(u1, 'User').set(u2, 'User').set(u3, 'Admin');//map 取值let roleName = userRoles.get(u2);console.log(roleName);//has()方法来查看map中是否包含给定的key。userRoles.has(u1);//true//如果调用的key在map中不存在,就会返回一个undefined。userRoles.get(u4);//undefined//如果key已经在map中了,那么调用set()后key对应的value就会被替换:userRoles.set(u1,'Admin');userRoles.get(u1);//size属性返回map中的元素个数let size = userRoles.sizeconsole.log(size);// 使用keys() 方法可以拿到map中所有的键// 使用values ()可以拿到所有的值,// 使用entries ()则可以以数组的方式获取键值对,for(let u of userRoles.keys()){console.log(u.name);}for(let f of userRoles.values()){console.log(r);}for(let [u,r] of userRoles){console.log('${u.name}:${r}');}//使用delete()方法可以删除map中的一个条目userRoles.delete(u2);console.log(userRoles.size);//如果想删除map中的所有条目,可以调用clear()方法userRoles.clear();console.log(userRoles.size);
10.2 Weak maps
WeakMap 跟Map在本质上是相同的,除了以下几点
1.key必须是对象。
2.WeakMap中的key可以被垃圾回收。
3.WeakMap不能迭代或者清空。
const SecretHolder = (function() {const secrets = new WeakMap();return class {setSecret(secret) {secrets.set(this, secret);}getSecret() {return secrets.get(this);}}})();const a = new SecretHolder();const b = new SecretHolder();a.setSecret('secret A');b.setSecret('secret B');console.log(a.getSecret());console.log(b.getSecret());
10.3 sets
set是一个不允许重复数据的集合。
//创建一个Set实例const roles = new Set();roles.add("User");//add 添加元素roles.add("Admin");//size 集合大小console.log(roles.size);//删除元素roles.delete("admin");console.log(roles.size);console.log(roles.delete("admin"));
10.4 Weak sets
const naughty = new WeakSet();const children = [{name: "Suzy"}, {name: "Derek"}];naughty.add(children[1]);for (let child of children) {if (naughty.has(child)) {console.log(`Coal for ${child.name}!`);} else {console.log(`Presents for ${child.name}!`);}}
