<<深入理解ES6>>记:七

2017-11-21  本文已影响15人  闫小兀

第7章 Set集合和Map集合

1.问题描述

var map = Object.create(null), key1 = {}, key2 = {};
map[key1] = "ylz";
console.log(map[key2]);
由于对象属性的键名必须是字符串, 因而代码中的key1和key2将转化为对象对应的默认字符串"[object Object]"

2.ES6中的Set集合
ES6中新增的Set类型是一种有序列表,其中含有一些相互独立的非重复值,通过Set集合可以快速访问其中的数据, 更有效地追踪各种离散值.

let set = new Set();
set.add(5);
set.add('5');
console.log(set.size);    // 2
let set = new Set();
set.add(5);
console.log(set.has(5));   // true
set.delete(5);
let set = new Set([1, 2, 3, 3, 4]);
    array = [...set];
console.log(array);      // [1, 2, 3, 4];
let set = new Set(), key = {};
set.add(key);
console.log(set.size);     // 1
// 移除原始引用
key = null;
console.log(set.size);     // 1
// 重新获取原始引用
key = [...set][0];

如上实例中, 明明已经删除, 但是Set依然持有引用(Set集合可以被看做强引用的集合), 为了解决这个问题, ES6提出另一种类型: Weak Set集合(弱引用Set集合);

let set = new WeakSet(),
    key = {};
set.add(key);    
console.log(set.has(key));   // true
set.delete(key);
console.log(set.has(key));

3.ES6中的Map集合
Set类型可以用来处理列表中的值, 但是不适合用于处理键值对这样的信息结构.ES6添加了Map集合解决类似问题

let map = new Map(['name', 'ylz'], ['age', 25]);
map.set('sex', '男');
console.log(map.has('name'));   // true
console.log(map.get('name'));   // 'ylz'
console.log(map.size);   // 'ylz'
let Person = (function() {
    let privateData = new WeakMap();
    function Person(name) {
        privateData.set(this, {name: name});
    };
    Person.prototype.getName = function() {
        return privateData.get(this).name
    }
    return Person;
})()
上一篇下一篇

猜你喜欢

热点阅读