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.

Author: Michael Gaskill, 2011-08-25

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.

Tens de te contentar com 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.

 109
Author: Sebastian Motraghi, 2017-05-23 12:25:48
for (var i in conf) {
  val = conf[i];
  console.log(val.path);
}
 64
Author: ace, 2011-08-25 01:26:10

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.

 6
Author: C. Scott Ananian, 2012-02-16 23:34:08

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

 2
Author: Juan Mendes, 2012-02-17 12:06:02
Isto pode ser uma velha questão, mas só para manter as coisas actualizadas, há um método forEach em javascript que funciona com a NodeJS. Aqui está a ligação dos documentos . E um exemplo:
     count = countElements.length;
        if (count > 0) {
            countElements.forEach(function(countElement){
                console.log(countElement);
            });
        }
 2
Author: toing_toing, 2018-06-28 14:07:50