2011-08-25 52 views
44

我想使用for each ... in與Node.js(v0.4.11)。Node.js:對於每個...在不工作

我用這樣的:

var conf = { 
    index: { 
     path: { 
     first: "index.html", 
     pattern: "index/{num}.html" 
     }, 
     template: "index.tpl", 
     limit: 8 
    }, 
    feed: { 
     path: "feed.xml", 
     template: "atom.tpl", 
     limit: 8 
    } 
} 

for each (var index in conf) { 
    console.log(index.path); 
} 

我得到以下錯誤:

 for each (var index in conf) { 
    ^^^^ 

node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
SyntaxError: Unexpected identifier 
    at Module._compile (module.js:397:25) 
    at Object..js (module.js:408:10) 
    at Module.load (module.js:334:31) 
    at Function._load (module.js:293:12) 
    at require (module.js:346:19) 
    at Object.<anonymous> (/home/paul/dev/indexing/lib/Index.js:3:13) 
    at Module._compile (module.js:402:26) 
    at Object..js (module.js:408:10) 
    at Module.load (module.js:334:31) 
    at Function._load (module.js:293:12) 

哪裏錯了嗎?自Javascript 1.6以來,支持for each ... in

有關使用for each ... in的信息,請參閱MDN

+4

V8實現ECMAScript。 MDN文檔顯示'ECMA version:none' – user113716

回答

98

不幸的是,節點不支持for each ... in,即使它是在JavaScript 1.6中指定的。 Chrome使用相同的JavaScript引擎,並且具有類似的缺點reported as

您必須結算array.forEach(function(item) { /* etc etc */ })

編輯:從谷歌官方的V8網站:

V8 implements ECMAScript as specified in ECMA-262 .

同MDN網站,它說,for each ...in是在JavaScript 1.6,它說,它是不是在任何ECMA版本 - 因此,據推測,其缺席節點。

+6

不要忘記'Object.keys'來將對象的鍵轉換爲數組 – goatslacker

+0

好吧,如果這就是V8的行爲方式,那我就沒問題。我可以使用'for ... in',但想要一些語法糖。感謝您的信息。 – pvorb

2

Node.js支持的ECMAScript版本中沒有for each in,目前只支持firefox。

重要的是要注意的是,JavaScript版本只與Gecko(Firefox的引擎)和Rhino(後面總是少數幾個版本)有關。節點使用V8隨後的ECMAScript規範

+2

這裏有_is_各個。有點。 'for each'是一種替代語法,應該像原始問題那樣工作,但實際上它顯然是在「JavaScript 1.6」中,但不在ECMAScript規範中,因此並不總是受支持。 (即使支持,我更喜歡你的答案中的語法。) – nnnnnn

+0

是的,真的有一個:[for each ... in](https://developer.mozilla.org/en/JavaScript/Reference/ Statements/for_each ... in) – pvorb

+1

@nnnnnn有一個,但不適用於EcmaScript。使用MDN時應該小心,因爲它的版本JavaScript沒有得到廣泛支持 –

58
for (var i in conf) { 
    val = conf[i]; 
    console.log(val.path); 
} 
+0

是的,它的確如此,但不是我想要的。現在我必須堅持這個版本。 – pvorb

+4

或'console.log(conf [i] .path)' –

6

https://github.com/cscott/jsshaper實現了從JavaScript 1.8到5.1的ECMAScript一個翻譯,這樣可以讓你在代碼中使用「每個」 WebKit的或節點上運行。