2011-08-25 9 views
44

for each ... inをNode.js(v0.4.11)と使いたいと思っていました。Node.js:each ... for not working

は、私はこのようにそれを使用します。

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) 

間違いがあるの? for each ... inはJavascript 1.6以降でサポートされています。

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 */ })を解決する必要があります。

EDIT:Googleの公式V8ウェブサイトから:それはfor each ...inではJavaScript 1.6であることを述べている同じMDNのウェブサイトに

V8 implements ECMAScript as specified in ECMA-262 .

、それがどのECMAバージョンではないことを言う - それゆえ、おそらく、そのノードからの不在

+6

オブジェクトのキーを配列に変換する' Object.keys'を忘れないでください – goatslacker

+0

それがV8の動作方法であれば、それでいいです。私は 'for ... in'を使うことができますが、構文的な砂糖が欲しいと思っています。情報ありがとうございました。 – pvorb

2

Node.jsでサポートされているECMAScriptのバージョンにはfor each inはありません。現在のところfirefoxでのみサポートされています。

重要なことは、JavaScriptのバージョンはGecko(Firefoxのエンジン)とRhino(常にいくつかのバージョンが残っています)にのみ関連していることです。ノードは、ECMAScriptの仕様を以下のV8

+2

それぞれがあります。並べ替え'for each'は元の質問と同様に動作するはずの代替構文ですが、実際はECMAScript仕様ではなく「JavaScript 1.6」になっているので、常にサポートされているとは限りません。 (サポートされている場所でも、私はあなたの答えの文法が好きです。) – nnnnnn

+0

はい、実際にはそれぞれ[in each ... in]です(https://developer.mozilla.org/ja/JavaScript/Reference/ステートメント/ for_each ... in) – pvorb

+1

@nnnnnn EcmaScriptはありませんが、1つあります。 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あなたはWebKitのか、ノード上で実行されるコードで「はそれぞれのために」を使用できるようになるのECMAScript 5.1にはJavaScript 1.8からトランスレータを実装し使用しています。