Почему 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.
Ответы
Ответ 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>
)суб >