web-dev-qa-db-fra.com

Node.js: pour chacun… dans ne fonctionne pas

Je voulais utiliser for each ... in avec Node.js (v0.4.11).

Je l'utilise comme ça:

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);
}

Je reçois l'erreur suivante:

        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)

Où est l'erreur? for each ... in est supporté depuis Javascript 1.6.

Voir MDN pour plus d'informations sur l'utilisation de for each ... in.

59
pvorb

Malheureusement, le noeud ne supporte pas for each ... in, Même s'il est spécifié dans JavaScript 1.6. Chrome utilise le même moteur JavaScript et rapporté comme présente une lacune similaire.

Vous devrez vous contenter de array.forEach(function(item) { /* etc etc */ }).

EDIT: sur le site officiel de Google V8:

V8 implémente ECMAScript comme spécifié dans ECMA-262 .

Sur le même site Web MDN où il est indiqué que for each ...in Est en JavaScript 1.6, il est indiqué qu'il ne figure dans aucune version d'ECMA - d'où, vraisemblablement, son absence de Node.

119
Sebastian Motraghi
for (var i in conf) {
  val = conf[i];
  console.log(val.path);
}
67
ace

https://github.com/cscott/jsshaper implémente un traducteur de JavaScript 1.8 à ECMAScript 5.1, ce qui vous permettrait d'utiliser "pour chaque" dans le code exécuté sur le Webkit ou le nœud.

6
C. Scott Ananian

Il n'y a pas for each in dans la version de ECMAScript prise en charge par Node.js, actuellement uniquement prise en charge par Firefox.

La chose importante à noter est que les versions JavaScript ne concernent que Gecko (le moteur de Firefox) et Rhino (qui a toujours quelques versions de retard). Node utilise la V8 qui suit les spécifications ECMAScript

2
Juan Mendes

C'est peut-être une vieille question, mais pour garder les choses à jour, il existe une méthode forEach en javascript qui fonctionne avec Node JS. Voici le lien depuis le docs . Et un exemple:

     count = countElements.length;
        if (count > 0) {
            countElements.forEach(function(countElement){
                console.log(countElement);
            });
        }
2
toing_toing

pour ceux habitués à php:

//add this function
function foreach(arr, func){
  for(var i in arr){
    func(i, arr[i]);
  }
}

usage:

foreach(myArray, function(i, v){
  //run code here
});

similaire à la version php:

foreach(myArray as i=>v){
  //run code here
}
0
SwiftNinjaPro