No.js: para cada ... em não trabalhar
eu queria usar for each ... in
com o nó.js (v0.4.11).
Uso-o assim:
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);
}
tenho o seguinte erro:
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)
Onde está o erro? for each ... in
é suportado desde Javascript 1.6.
Ver MDN para informações sobre a utilização de for each ... in
.
5 answers
Infelizmente o nó não suporta for each ... in
, apesar de estar especificado no JavaScript 1.6. O Chrome usa o mesmo motor de JavaScript e é reportado como tendo uma falha semelhante.
array.forEach(function(item) { /* etc etc */ })
.
Editar: a partir do site oficial do Google V8:
O V8 implementa o ECMAScript conforme especificado em o ECMA-262 .
No mesmo site MDN onde diz que {[[2]} está em JavaScript 1.6, diz que não está em qualquer Versão ECMA-daí, presumivelmente, a sua ausência do nodo.
for (var i in conf) {
val = conf[i];
console.log(val.path);
}
Https://github.com/cscott/jsshaper implementa um tradutor de JavaScript 1.8 para ECMAScript 5.1, O que lhe permitiria usar 'para cada' em código executado no webkit ou nodo.
Não existe for each in
na versão do ECMAScript suportada pelo Node.js, apenas suportado pelo firefox atualmente.
O importante a notar é que as versões JavaScript só são relevantes para Gecko (motor do Firefox) e Rhino (que está sempre algumas versões atrás). Node USA V8 que segue as especificações ECMAScript
count = countElements.length;
if (count > 0) {
countElements.forEach(function(countElement){
console.log(countElement);
});
}