期望一个赋值或函数调用,而是看到一个表达式

rya*_*nve 35 javascript jslint jshint

我对这个JSLint错误非常感兴趣.我怎么能忍受呢?它有标志或复选框吗?

当你做以下事情时,你会得到它:

v && arr.push(v);
Run Code Online (Sandbox Code Playgroud)

而不是:

if (v) {
    arr.push(v);
}
Run Code Online (Sandbox Code Playgroud)

两者都做同样的事情.如果你把:

window.test = function(v) {
    'use strict';
    var arr = [];
    if (v) {
        arr.push(v);
    }
    return arr;
};
Run Code Online (Sandbox Code Playgroud)

进入minifier它minifies到这个反正:

window.test=function(a){var b=[];a&&b.push(a);return b};
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 75

我不认为JSLint可以选择关闭它.

但是,JSHint(具有更多选项的fork)有一个选项:expr选项,记录为"如果ExpressionStatement应该被允许作为程序".

  • http://www.jshint.com/docs/options/#expr为将来节省时间 (9认同)

Ree*_*edD 36

您可以添加以下行来忽略该警告:

/*jshint -W030*/

你可以在这里阅读更多相关信息.

  • 然而,对于大多数在这里降落的人来说,它仍然是最有用的答案. (14认同)
  • 答案与问题完全无关,问题是关于JSLint,而不是JSHint. (3认同)
  • "完全无关"?因为JSHint与JSLint完全无关? (2认同)

Koo*_*Inc 9

在JSLint中没有这个选项.您可以使用以下方法规避它:

var dummy = v && arr.push(v);
Run Code Online (Sandbox Code Playgroud)

NB:dummy在此true之后进行评估.

另一种解决方法可能是:

function expression(statement) { 
 'use strict';
 return statement; 
}
expression(v && arr.push);
Run Code Online (Sandbox Code Playgroud)

  • 它会起作用,但它很愚蠢.minifier实际上会对其进行排序,但为了便于阅读,最好只使用`if`语句而不是IMO. (6认同)

Shi*_*vam 5

使用ESLint时正在寻找如何抑制它的人们。您可以通过在该行上方写以下注释来忽略它。

// eslint-disable-next-line no-unused-expressions
Run Code Online (Sandbox Code Playgroud)

您还可以通过在文件的最顶部放置以下注释来禁止显示整个文件的警告。

/* eslint-disable no-unused-expressions */
Run Code Online (Sandbox Code Playgroud)