NodeJS [] .forEach undefined

Dan*_*rom 5 javascript v8 node.js

[].forEach在NodeJS中遇到了奇怪的问题.

(使用NodeJs v5.4.1)

将此代码放在函数中

function _buildUserQuestionsForDisplay(question,callback){
    var res = {}
    ["is_open","created","deleted","_id"].forEach(function(v){
        res[v] = question[v]
    })
   ...
   ...
}
Run Code Online (Sandbox Code Playgroud)

抛出错误:

[ "IS_OPEN", "创建", "删除", "_ ID"].的forEach(函数(V){

TypeError:无法读取未定义的属性'forEach'

如果我将代码更改为,它可以工作

var arr = ["is_open","created","deleted","_id"];
arr.forEach(function(v){
    res[v] = question[v]
})
Run Code Online (Sandbox Code Playgroud)

我已经测试了相同的功能Chrome.console并且第一种方式有效.
我知道两者都使用V8JS引擎,这是一个bug还是Javascript规则中缺少的东西?

谢谢!

And*_*ndy 4

如果此行后面没有分号,您的代码就会中断:

var res = {}
Run Code Online (Sandbox Code Playgroud)

为了尽量减少这些问题,一个好主意是使用 linter(如果您不使用 linter)。两者JSHintESLint可以作为开发插件添加到您的代码编辑器中(我在 SubmlimeText 中使用 ESLint 和 Airbnb 样式表),也可以使用 Gulp 或 Grunt 添加到您的工作流程中,以便在提交代码之前捕获此类错误。

如果您选择尽可能省略分号,我的建议是在以这些标记之一开头的任何语句中或以算术运算符标记“/”、“之一开头的任何语句中紧邻左括号或方括号之前插入分号。 +”,或“-”(如果您碰巧写了这样的语句)。- Michaeljohn Clement 2010 年的博客文章

  • 我认为“某种原因”是代码在没有分号的情况下所做的事情是尝试访问空对象的“_id”属性,这当然是未定义的并且没有 forEach() 方法。 (5认同)