Nodejs Harmony / ES6中的地图集合坏了吗?

时间:2013-10-15 23:51:27

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

似乎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”]]);
  未定义
  >地图
  {}

所以contsructor初始化似乎不起作用。 然后我按照Firefox的例子,他们大多不工作:

  

>的console.log(map.has( “名称”)); //真实   假
  未定义
  >的console.log(map.get( “名称”)); //“尼古拉斯”
  未定义
  未定义
  >的console.log(map.has( “标题”)); //真实   假
  未定义
  >的console.log(map.get( “标题”)); //“作者”
  未定义
  未定义
  >的console.log(map.size()); // 2
  TypeError:Object#没有方法'size'       在repl: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

2 个答案:

答案 0 :(得分:2)

它正在发挥作用。我在节点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实现的良好文档,这使得它很难使用。它还不是标准,因此实现方式会有所不同。

答案 1 :(得分:0)

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

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

非常不幸的是,似乎没有任何方法可以迭代Map中的元素。