Подтвердить что ты не робот

Почему 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.
4b9b3361

Ответ 1

Если вы действительно хотите прослушать 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.

Итак, !! означает: преобразовать что-то в условное представление.

Ответ 2

/*jshint boss:true */

Поэкспериментируйте с options.

Ответ 3

Я уверен, что jshint отлично понимает выражение, просто большинство людей, которые пишут if (a = b), на самом деле означают if (a == b), и поэтому это порождает предупреждение.

Поскольку ваш код - это то, что вы намеревались, вы можете добавить явный тест:

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

Ответ 4

Существует, по крайней мере, два способа решения сообщенной ошибки, согласно JSHint docs.

  • Добавить /*jshint boss:true */ до условного оператора
  • Утверждение Wrap в дополнительных скобках, т.е. while ((element_iterator = element_iterator.nextSibling)) {...}

Лично я считаю, что окружающая среда с дополнительными круглыми скобками - лучшая практика, поскольку она хранит проверку ошибок, но по-прежнему имеет смысл кода. Добавление !! до этого фактически не является чем-то, кроме преобразования выражения в true/false назад и вперед два дополнительных раза.

Ответ 5

Это выражение, и вы можете изменить его для работы с JSHint (хотя это не так):

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

В последнем примере. Однако вам не нужно это делать. JSHint - это только инструмент, который поможет вам улучшить привычки кодирования и исправить ошибки, но учитывая, что у вас есть четкие, кратким и, на мой взгляд, лучший способ сделать это, просто игнорируйте эти сообщения.

Ответ 6

jshint не может определить, действительно ли вы хотели сделать назначение в блоке условий, или если это действительно должно быть сравнение. Было бы опасно, что у других людей могут быть такие же сомнения.

В случае итератора, я думаю, вы в порядке.

Ответ 7

У меня была эта ошибка, потому что у меня была конечная запятая в объявлении, предшествующем функции:

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

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

(Трудно было найти, но подтверждает мое мнение о том, что линтры обычно правы, это мой код неправильный. Если бы я отключил предупреждения во всем мире - или даже в этом месте - ошибка все равно присутствовала бы. </lecture>)суб >