我正在使用--harmony
标志在Node.JS v0.11.4中使用ECMAScript 6符号和地图。请考虑以下事项。
var a = Map();
a.set(Symbol(), 'Noise');
// Prints "1"
console.log(a.size);
如果属性由“匿名”符号键标识,可以检索值'Noise'
吗?这个符号密钥是唯一的吗?
答案 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');
}
}