Node.js: для каждого ... не работает - PullRequest
58 голосов
/ 25 августа 2011

Я хотел использовать for each ... in с Node.js (v0.4.11).

Я использую это так:

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.

См. MDN для получения информации об использовании for each ... in.

Ответы [ 6 ]

118 голосов
/ 25 августа 2011

К сожалению, узел не поддерживает for each ... in, даже если он указан в JavaScript 1.6.Chrome использует тот же движок JavaScript, и о сообщается как с аналогичным недостатком.

Вам придется согласиться на array.forEach(function(item) { /* etc etc */ }).

РЕДАКТИРОВАТЬ: Из официального Google V8веб-сайт:

V8 реализует ECMAScript, как указано в ECMA-262 .

На том же веб-сайте MDN, где говорится, что for each ...in находится вJavaScript 1.6, он говорит, что его нет ни в одной версии ECMA - следовательно, предположительно, его отсутствие в Node.

67 голосов
/ 25 августа 2011
for (var i in conf) {
  val = conf[i];
  console.log(val.path);
}
6 голосов
/ 17 февраля 2012

https://github.com/cscott/jsshaper реализует переводчик с JavaScript 1.8 на ECMAScript 5.1, который позволит вам использовать «для каждого» в коде, работающем на webkit или узле.

2 голосов
/ 28 июня 2018

Это может быть старый вариант, но просто чтобы держать вещи в курсе, в javascript есть метод forEach, который работает с NodeJS. Вот ссылка из документов . И пример:

     count = countElements.length;
        if (count > 0) {
            countElements.forEach(function(countElement){
                console.log(countElement);
            });
        }
2 голосов
/ 25 августа 2011

В версии ECMAScript, поддерживаемой Node.js, отсутствует for each in, в настоящее время поддерживается только firefox.

Важно отметить, что версии JavaScript имеют отношение только к Gecko (движок Firefox) и Rhino (за которыми всегда стоят несколько версий). Узел использует V8, который соответствует спецификациям ECMAScript

0 голосов
/ 07 июля 2019

для тех, кто использовал php:

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

использование:

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

похоже на версию php:

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