ES5 中的 Set 与 Map

ES5 中,开发者使用对象属性来模拟 SetMap,就像这样:

let set = Object.create(null);

set.foo = true;

// checking for existence
if (set.foo) {

    // do something
}

本例中的 set 变量是一个原型为 null 的对象,确保在此对象上没有继承属性。使用对象的属性作为需要检查的唯一值在 ES5 中是很常用的方法。当一个属性被添加到 set 对象时,它的值也被设为 true,因此条件判断语句(例如本例中的 if 语句)就可以简单判断出该值是否存在。

使用对象模拟 Set 与模拟 Map 之间唯一真正的区别是所存储的值。例如,以下例子将对象作为 Map 使用:

let map = Object.create(null);

map.foo = "bar";

// retrieving a value
let value = map.foo;

console.log(value);         // "bar"

此代码将字符串值 "bar" 存储在 foo 键上。与 Set 不同,Map 多数被用来提取数据,而不是仅检查键的存在性。