为什么jshint不能将赋值识别为表达式?

时间:2011-11-12 22:53:52

标签: javascript jshint

如何修改这些行以使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.

8 个答案:

答案 0 :(得分: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.

因此,!!表示:将某些东西转换为条件表示。

答案 1 :(得分:19)

/*jshint boss:true */

试用options

答案 2 :(得分:13)

我确信jshint理解表达式很好,只是大多数写if (a = b)的人实际上意味着if (a == b),所以这会产生警告。

由于您的代码符合您的意图,您可以添加一个明确的测试:

while ((element_iterator = element_iterator.nextSibling) !== null) { ... }

答案 3 :(得分:4)

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

  1. 在条件语句
  2. 之前添加/*jshint boss:true */
  3. 在额外括号中换行声明,即while ((element_iterator = element_iterator.nextSibling)) {...}
  4. 就我个人而言,我认为使用额外的括号是最好的做法,因为它可以保持错误检查,但仍然可以在代码方面做得很好。之前添加!!实际上没有任何内容,只能将表达式来回转换为真/假两次。

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

jshint无法判断你是否真的打算在条件块中进行赋值,或者是否真的应该进行比较。担心的是其他人可能会有同样的怀疑。

对于迭代器,我认为你没事。

答案 6 :(得分:0)

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

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

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

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

答案 7 :(得分:0)

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