【问题标题】:Recover property key/value恢复属性键/值
【发布时间】:2013-07-06 09:31:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我不知道泄漏,但是如果没有对 Symbol() 返回的引用,您将无法返回该值...
  • 我不知道 ES 6 符号是如何工作的,但你不能枚举 a 对象吗? for (var key in a) alert(a[key]);

标签: javascript node.js ecmascript-6


【解决方案1】:

在 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 从今年五月开始。这应该只是时间问题。

如果你现在需要这个功能,你可以使用 map-set-for-each 来填充 forEach。您需要修改它以在case 'object': 之后添加case 'symbol':

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');
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多