2015-05-14 75 views
0

我試圖運行與BabelJs下面的代碼空對象:`Map`返回與BabelJS

var m = new Map(); 
m.set('a', 'b'); 
m.set('b', 1); 
m.set('c', { a: 12 }); 

console.log(m); 
console.log(typeof m); 

但我得到一個空objectbabel-node結果:

{} 
object 

有什麼問題?

+1

這意味着地圖實現沒有任何可枚舉的屬性,僅此而已 – vkurchatkin

+0

@vkurchatkin但它在Google Chrome開發者控制檯中有不同的結果 –

+0

在Chrome中,Map是本機和控制檯支持。試試iojs 2.0.0,你會看到相同的結果 – vkurchatkin

回答

2

什麼問題?

沒有問題。地圖根本沒有自己的枚舉屬性。如果你的問題是你爲什麼看到{}而不是Map {....},那是因爲你的環境還沒有支持Map s,因此core-js(這是Babel使用的)填充它們。

不可能(afaik)重寫console.log應該如何顯示一個值,因此您只能看到一個空對象。根據瀏覽器供應商認爲有用的情況,控制檯只顯示的一些表示值。


爲了讓我更清楚一點,讓我們看看你會得到什麼console.log(document.body)

> console.log(document.body) 
<body class=​"...">​…​</body>​ 

這是否意味着document.body是包含HTML字符串?當然不是。 document.body是一個DOM元素。控制檯只呈現其HTML表示,因爲有人認爲這比僅轉儲DOM元素的所有屬性更有幫助。

如果你真的想看到一個對象的所有屬性,console.dir需要你至少一步。

+0

完美,謝謝你 –

0

好的,我發現這個問題。如果您使用iojs而不是node,它工作得很好:

babel-node test/t.js 

其結果將是:

object 
Map { 'a' => 'b', 'b' => 1, 'c' => { a: 12 } } 

注:iojs安裝程序改變了nodeiojs符號鏈接。

+0

那麼,究竟是什麼*是問題?這個答案是什麼意思?我必須使用io.js而不是Node來使Babel工作嗎?或者爲了能夠使用地圖? –