19

我需要如何修改这些行以使 jshint 满意?

赋值是一个表达式。为什么 jshint 不明白这一点?很明显,翻译是这样的。

Line 572: while(bookmark_element=bookmark_list[iterator++])

Expected a conditional expression and instead saw an assignment.


Line 582: while(bookmark_element=bookmark_list[iterator++])

Expected a conditional expression and instead saw an assignment.


Line 623: while(element_iterator=element_iterator.nextSibling)

Expected a conditional expression and instead saw an assignment.
4

8 回答 8

20

如果您真的想听 JSHint,请通过以下方式将表达式转换为布尔值:

while (!!(bookmark_element=bookmark_list[iterator++]))

! means: Something that evaluates to true is converted to false,
         something that evaluates to false is converted to true.

因此,!!意味着:将某些内容转换为条件表示。

于 2011-11-12T22:59:26.340 回答
19
/*jshint boss:true */

试验选项

于 2011-11-12T22:57:48.660 回答
13

我确信 jshint 可以很好地理解这个表达,只是大多数人写的if (a = b)都是真正的意思if (a == b),所以这会产生一个警告。

由于您的代码是您想要的,您可以添加一个显式测试:

while ((element_iterator = element_iterator.nextSibling) !== null) { ... }
于 2011-11-12T22:57:49.180 回答
4

根据JSHint 文档,至少有两种方法可以解决报告的错误。

  1. /*jshint boss:true */在条件语句之前添加
  2. 在额外的括号中包装语句,即 while ((element_iterator = element_iterator.nextSibling)) {...}

就个人而言,我认为用额外的括号括起来是最佳实践,因为它可以保持错误检查,但在代码方面仍然很有意义。添加!!之前实际上什么也没做,只是将表达式来回转换为真/假两次。

于 2016-07-12T07:20:56.767 回答
0

它是一个表达式,您可以修改它以使用 JSHint(虽然它不是很好),如下所示:

while(element_iterator.nextSibling) {
    element_iterator = element_iterator.nextSibling;

对于你的最后一个例子。但是,您不需要这样做。JSHint 只是一个帮助您改善编码习惯和纠正错误的工具,但鉴于您所拥有的内容清晰、简洁,并且(在我看来)是最好的方法 - 请忽略这些消息。

于 2011-11-12T22:58:50.023 回答
0

jshint 无法判断您是否真的打算在条件块中进行分配,或者这是否真的应该是一个比较。担心的是其他人可能有同样的疑问。

在迭代器的情况下,我认为你没问题。

于 2011-11-12T23:01:59.057 回答
0

我有这个错误,因为我在函数前面的声明中有一个尾随逗号:

this.foo = "bar",   // <- Error was here

this.myfunc = function() {
   ...   // <- Error reported on this line
};

(很难找到,但强化了我的观点,即 linter 通常是正确的,这是我的代码错误。如果我在全局范围内禁用了警告 - 甚至在那个地方 - 错误仍然会存在。</lecture>

于 2015-12-15T17:14:55.220 回答
0

在您的 Javascript 文件中添加 /* jshint expr: true */注释,它将不再显示警告。

于 2018-07-11T08:45:36.347 回答