6

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

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

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

'Noise'如果该属性由一个“匿名”符号键标识,并且保证是唯一的,那么是否可以检索该值?

4

1 回答 1

5

无法在 node.js 中执行此操作,因为当前版本的 v8 尚未实现此错误报告中指出的迭代。

我们可以通过查看 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 之前可能没有实现这些方法,因为它不支持生成器。但现在从今年五月开始。实施这应该只是时间问题。

如果你现在需要这个功能,你可以使用map-set-for-each which polyfills forEach。您将需要修改它以添加case 'symbol':after 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');
  }
}
于 2013-07-13T10:39:07.573 回答