【问题标题】:Map collection in Nodejs Harmony/ES6 broken?Nodejs Harmony/ES6 中的地图集合坏了?
【发布时间】:2013-10-15 23:51:26
【问题描述】:

似乎 Nodejs 0.10.20 中的 Map 已损坏。我用 --harmony (包括 --harmony_collections 标志)启动它。
如需参考,请查看http://dailyjs.com/2012/10/15/preparing-for-esnext/
下面的示例在 Firefox 20.0 中运行。

在 Nodejs 控制台中,我执行以下操作

> var map = new Map([ ["name", "Nicholas"], ["title", "Author"]]);
未定义
> 地图
{}

所以构造函数初始化似乎不起作用。 然后我按照 Firefox 示例进行操作,但它们大多不起作用:

> console.log(map.has("name")); // 真的

未定义
> console.log(map.get("name")); // “尼古拉斯”
未定义
未定义
> console.log(map.has("title")); // 真的

未定义
> console.log(map.get("title")); // “作者”
未定义
未定义
> 控制台.log(map.size()); // 2
TypeError: Object # has no method 'size'
在回复:1:17
在 REPLServer.self.eval (repl.js:110:21)
在 repl.js:249:20
在 REPLServer.self.eval (repl.js:122:7)
在界面。 (repl.js:239:12)
在 Interface.EventEmitter.emit (events.js:95:17)
在 Interface._onLine (readline.js:202:10)
在 Interface._line (readline.js:531:8)
在 Interface._ttyWrite (readline.js:760:14)
在 ReadStream.onkeypress (readline.js:99:10)

我很困惑这些基本的 Map 方法不起作用。 我有 Nodejs 版本 0.10.20

【问题讨论】:

  • 我不确定你的问题/是/甚至。这是一个开发功能。另外,不要在 REPL 中使用console.log()。结果已经以相同的方式检查和转储。
  • 您需要使用整个数组作为该代码中的键,而不仅仅是任意数组元素...

标签: node.js ecmascript-harmony ecmascript-6


【解决方案1】:

它正在工作。我在节点 v0.10.13 上测试过

var map = new Map();
map.set("name", "Nicholas");
map.set("title", "Author");

> map.has("name");
true
> map.get("name");
'Nicholas'
> map.has("title");
true
> map.get("title");
'Author'

您正在尝试的是特定于 Mozilla 的。它没有在 V8 中实现。在您尝试过的size 中,V8 中没有使用构造函数进行数组初始化。我无法在 V8 中找到 es-harmony 实现的良好文档,这使得它很难使用。而且它还不是一个标准,所以实现会有所不同。

【讨论】:

  • 正确,V8 还不理解 Map 构造函数的可选 iterable 参数,这是对提案的更新(而且 V8 只是最近才获得对迭代器的支持)。
  • 好的。多谢你们。我假设这些东西会出现在 nodejs 0.12 中?
  • @deepblue 看起来非常不太可能。
【解决方案2】:

具体来说,node.js v0.10.25 Map 似乎支持以下方法:

> console.log(Object.getOwnPropertyNames(Map.prototype))
[ 'constructor', 'get', 'set', 'has', 'delete' ]

很遗憾,似乎没有任何方法可以遍历 Map 中的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2012-05-26
    • 2014-12-05
    • 2013-08-15
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多