2013-10-15 80 views
1

似乎Nodejs 0.10.20中的Map已損壞。我用--harmony(包括--harmony_collections標誌)啓動它。
僅供參考,退貨http://dailyjs.com/2012/10/15/preparing-for-esnext/
以下示例在Firefox 20.0中運行。Nodejs Harmony/ES6中的地圖集合已損壞?

在控制檯的NodeJS

我下面

> var map = new Map([ ["name", "Nicholas"], ["title", "Author"]]);
undefined
> map
{}

所以contsructor初始化似乎沒有工作。 然後我按照Firefox的例子,他們大多不工作:

> console.log(map.has("name")); // true
false
undefined
> console.log(map.get("name")); // "Nicholas"
undefined
undefined
> console.log(map.has("title")); // true
false
undefined
> console.log(map.get("title")); // "Author"
undefined
undefined
> console.log(map.size()); // 2
TypeError: Object # has no method 'size'
at repl:1:17
at REPLServer.self.eval (repl.js:110:21)
at repl.js:249:20
at REPLServer.self.eval (repl.js:122:7)
at Interface. (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)

林困惑的是,這些基本的地圖方式不工作。 我有Nodejs版本0.10.20

+0

我不確定你的問題/是/甚至。這是一項發展功能。另外,不要在REPL中使用'console.log()'。結果已經被檢查並以相同的方式傾倒。 –

+0

你需要使用整個數組作爲該代碼中的一個鍵,而不僅僅是一個任意的數組元素...... – dandavis

回答

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實現的良好文檔,這使得難以使用。此外它還不是一個標準,所以實現會有所不同。

+0

正確,V8還不能理解'Map'構造函數的可選'iterable'參數,這是一個更新的除了提案(和V8最近纔得到了對迭代器的支持)。 –

+0

好的。多謝你們。我假設這東西是在nodejs 0.12? – deepblue

+0

@deepblue看起來*非常不可能。 –

0

具體來說,Node.js的v0.10.25地圖似乎支持了以下方法:

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

非常不幸的是,似乎沒有被任何方式遍歷結構圖中的元素。