我正在使用带有标志的 Node.JS v0.11.4 中的 ECMAScript 6 符号和地图--harmony
。考虑以下。
var a = Map();
a.set(Symbol(), 'Noise');
// Prints "1"
console.log(a.size);
'Noise'
如果该属性由一个“匿名”符号键标识,并且保证是唯一的,那么是否可以检索该值?
我正在使用带有标志的 Node.JS v0.11.4 中的 ECMAScript 6 符号和地图--harmony
。考虑以下。
var a = Map();
a.set(Symbol(), 'Noise');
// Prints "1"
console.log(a.size);
'Noise'
如果该属性由一个“匿名”符号键标识,并且保证是唯一的,那么是否可以检索该值?
无法在 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');
}
}