Node.js:对于每个…在不工作

Node.js: for each … in not working

本文关键字:工作 于每个 js Node      更新时间:2023-09-26

我想使用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)

错误在哪里?从Javascript 1.6开始支持for each ... in

for each ... in的使用请参见MDN

不幸的是node不支持for each ... in,即使在JavaScript 1.6中指定了它。Chrome使用相同的JavaScript引擎,据报道有类似的缺点。

你将不得不满足于array.forEach(function(item) { /* etc etc */ })

编辑:来自Google V8官方网站:

V8实现ECMA-262中指定的ECMAScript。

在同一个MDN网站上,它说for each ...in在JavaScript 1.6中,它说它不在任何ECMA版本中-因此,推测它不在Node中。

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'。

这可能是一个老问题,但只是为了保持更新,javascript中有一个与NodeJS一起工作的forEach方法。这是文档中的链接。还有一个例子:

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

在Node.js支持的ECMAScript版本中没有for each in,目前只有firefox支持。

需要注意的重要事情是JavaScript版本只与Gecko (Firefox的引擎)和Rhino(总是落后几个版本)相关。Node使用V8,它遵循ECMAScript规范

对于习惯使用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
}