恢复属性键/值

Ran*_*lue 6 javascript node.js ecmascript-6

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

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

// Prints "1"
console.log(a.size);
Run Code Online (Sandbox Code Playgroud)

'Noise'如果属性由"匿名"符号键标识,可以检索该值,保证该值是唯一的吗?

mak*_*mak 5

在node.js中不可能这样做,因为当前版本的v8没有实现迭代,如此错误报告中所示.

我们可以通过查看v8的collection.js的源代码来确认:

InstallFunctions($Map.prototype, DONT_ENUM, $Array(
    "get", MapGet,
    "set", MapSet,
    "has", MapHas,
    "delete", MapDelete,
    "clear", MapClear
));
Run Code Online (Sandbox Code Playgroud)

但是,正如中可以看到的ECMAScript 6维基,应该也有items(),keys()values().v8之前可能没有实现这些方法,因为它不支持生成器.但现在从今年5月开始.在实施之前,这只是一个时间问题.

如果您现在需要具有此功能,则可以使用map-set-for-each进行polyfill forEach.您将需要对其进行修改补充case 'symbol':case 'object':.

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

当v8实现迭代时,Map你将能够找到Noise如下:

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