Узел.js: для каждого ... в не работает


Я хотел использовать for each ... in С узла.в 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.

5 51

5 ответов:

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

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

редактировать: с официального сайта Google V8:

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

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

for (var i in conf) {
  val = conf[i];
  console.log(val.path);
}

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

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

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

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

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