恢复属性键/值

时间:2013-07-08 22:25:30

标签: javascript node.js ecmascript-6

我正在使用--harmony标志在Node.JS v0.11.4中使用ECMAScript 6符号和地图。请考虑以下事项。

var a = Map();
a.set(Symbol(), 'Noise');

// Prints "1"
console.log(a.size);

如果属性由“匿名”符号键标识,可以检索值'Noise'吗?这个符号密钥是唯一的吗?

1 个答案:

答案 0 :(得分:5)

无法在node.js中执行此操作,因为当前版本的v8尚未实现此bug report中所示的迭代。

我们可以通过查看v8的collection.js

的源代码来确认
InstallFunctions($Map.prototype, DONT_ENUM, $Array(
    "get", MapGet,
    "set", MapSet,
    "has", MapHas,
    "delete", MapDelete,
    "clear", MapClear
));

但是,正如ECMAScript 6 wiki中所见,还应该有items()keys()values()。 v8之前可能没有实现这些方法,因为它不支持生成器。但现在it does今年5月以来。在实施之前,这只是一个时间问题。

如果您现在需要使用此功能,可以使用map-set-for-each填充forEach。您需要对其进行修改,才能在case 'symbol':之后添加case 'object':

a.forEach(function(value, key) {
  if (value === 'Noise') {
    console.log('Give mak the bounty');
  }
});

当v8实现Map的迭代时,您将能够找到Noise,如下所示:

for (let [key, value] of a) {
  if (value === 'Noise') {
    console.log('Upvotes for future');
  }
}