预期是一个赋值或函数调用,而实际上看到的是一个表达式。

39

我完全能够接受这个JSLint错误。我该如何容忍它?是否有相应的标志或复选框可以处理它?

当您执行以下操作时,就会出现这种情况:

v && arr.push(v);

与之相反:

if (v) {
    arr.push(v);
}

两者完全相同,如果你输入:

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

如果输入到压缩器中,无论如何它都会被缩小为以下内容:

window.test=function(a){var b=[];a&&b.push(a);return b};
4个回答

76

我认为JSLint没有关闭此功能的选项。

JSHint(一个具有更多选项的分支)有这个选项:表达式选项,文档中说明了“如果应该将ExpressionStatement作为程序允许”。


@diEcho:你也可以下载并在本地使用它(这就是我所做的)。我通过NodeJS运行它,并设置了我的首选选项,这极大地提高了我对正确代码的信心。 :-) - T.J. Crowder
可以再详细描述一下,为什么会出现那个警告? - Mohammad Kermani

37

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

/*jshint -W030 */

您可以在这里了解更多相关信息。


3
答案与问题完全无关,问题是关于 JSLint 而不是 JSHint。 - Arseni Mourzenko
15
尽管如此,对于大多数来到这里的人来说,这仍然是最有用的答案。 - Charlie Martin
2
“完全不相关”?因为JSHint与JSLint完全不相关? - iconoclast

11

当使用ESLint时,寻找如何抑制它的人们。您可以通过在无用表达式 (no-unused-expressions)的上方添加以下注释来忽略它。

// eslint-disable-next-line no-unused-expressions
您还可以通过在文件顶部放置以下注释来抑制整个文件的警告。
/* eslint-disable no-unused-expressions */

1
我建议您还提供此特定规则no-unused-expressions的文档链接。 - johannchopin

9

JSLint中没有此选项。您可以使用以下方法规避此问题:

var dummy = v && arr.push(v);

NB: 在此之后,dummy 的值为true

另一个解决方法可能是:

function expression(statement) { 
 'use strict';
 return statement; 
}
expression(v && arr.push);

6
它能起作用,但很愚蠢。缩小器会实际上解决这个问题,但为了可读性,使用 if 语句比那更好,这是我个人的看法。 - ryanve
没错。但你要求一种容忍它的方法。我添加了另一个解决方法。就像Crockford在某个地方说的那样:jsLint旨在让程序员感到痛苦 ;~) - KooiInc
错误的 wonderful && hack 在 jsLint 中不起作用... 可能取决于版本... - faebster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接