2011-08-25 4 views
44

for each ... in을 Node.js (v0.4.11)와 함께 사용하고 싶습니다.Node.js : 각 ... 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을 지원하지 않지만 자바 스크립트 1.6에서는 지정되어 있습니다. Chrome은 동일한 자바 스크립트 엔진을 사용하며 비슷한 결함이있는 reported as입니다.

array.forEach(function(item) { /* etc etc */ })에 대해 해결해야합니다.

편집 : 구글의 공식 V8 웹 사이트에서 : 그것은 for each ...in 자바 스크립트 1.6에 있음을 말한다 같은 MDN 웹 사이트에

V8 implements ECMAScript as specified in ECMA-262 .

, 그것이 어떤 ECMA 버전에없는 것을 말한다 - 따라서, 아마도 그 노드에서 부재.

+6

오브젝트의 키를 배열로 변환하기 위해'Object.keys'를 잊지 마십시오. – goatslacker

+0

글쎄, 그것이 V8의 작동 방식이라면, 그것으로 충분합니다. 나는 for ... in을 사용할 수 있지만 syntactic sugar를 원한다. 정보 주셔서 감사합니다. – pvorb

2

Node.js에서 지원하는 ECMAScript 버전에는 for each in이 없으며 현재 Firefox에서만 지원됩니다.

중요한 점은 JavaScript 버전은 Gecko (Firefox의 엔진) 및 Rhino (항상 일부 버전 뒤에 있음)에만 관련된다는 것입니다. 노드

+2

각각 _is_입니다. 일종의. 'for each '는 원래의 질문에서와 같이 작동해야하는 대체 구문입니다. 실제로 ECMAScript 사양이 아닌 "JavaScript 1.6"이지만 실제로는 지원되지 않습니다. (비록 그것이 지원되는 곳이라 할지라도 나는 당신의 대답에서 문법을 선호한다.) – nnnnnn

+0

네, 실제로 각각이 있습니다 : [for each ... in] (https://developer.mozilla.org/en/JavaScript/Reference/ Statements/for_each ... in) – pvorb

+1

@nnnnnn 하나는 있지만 EcmaScript는 없습니다. MDN을 사용할 때는 자바 스크립트 버전이 널리 지원되지 않으므로 항상주의해야합니다. –

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 당신이 웹킷 또는 노드에서 실행중인 코드에 '각'사용할 수 있도록 할 자바 스크립트 1.8에서 ECMAScript를 5.1로 번역기를 구현 인 ECMAScript 사양을 다음과 V8을 사용합니다.