なぜ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.
18
どうすればブールにキャストできますか?
追加された 著者 user656925,

8 答え

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.

したがって、 !! は次のことを意味します:何かを条件付き表現に変換します。

19
追加された
@ stack.user.0 !! より直接ですか?実際のブール値が必要な場合、JavaScriptは真実/偽りです。 !! はあなたの最も簡単な賭けです。
追加された 著者 Dave Newton,
あなたは実際にここでブール値にキャストする必要はありません。代入の周りに余分な括弧を追加するだけで、jshintがそれを式として認識するのに十分です。だから、上記の答えで、あなたは削除することができます!警告はまだ消されています
追加された 著者 Charlie Martin,
私はこれと一緒に行った。
追加された 著者 user656925,
javasciptは一種のboolへのキャストを持っていますか?より直接的なsometing?
追加された 著者 user656925,
/*jshint boss:true */

オプションを試してみてください。

19
追加された

jshintが式をうまく理解していると確信しています。それはif(a = b)を書く人のほとんどが if(a == b)これにより警告が生成されます。

あなたのコードはあなたが意図したものなので、明示的なテストを追加することができます:

while ((element_iterator = element_iterator.nextSibling) !== null) { ... }
13
追加された

JSHintドキュメントによると、報告されたエラーを解決するには少なくとも2つの方法があります。

  1. Add /*jshint boss:true */ before conditional statement
  2. Wrap statement in extra parentheses, i.e. while ((element_iterator = element_iterator.nextSibling)) {...}

個人的には、余分なカッコで囲むことは、エラーチェックを維持するがコード違反がないのでベストプラクティスだと思う。前に !! を追加することは、実際には何もしませんが、式をtrue/falseに2回余分に前後に変換します。

4
追加された
しかし、特に "for"ループの場合、 "可変シャドーイング"に関する警告には注意する価値があります。リファレンス: jshint.com/docs/options/#shadow
追加された 著者 PageYe,

これは式であり、JSHintで動作するように修正することができます(これはうまくありませんが):

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

あなたの最後の例です。ただし、これを行う必要はありません。 JSHintは、コーディングの習慣を改善し、間違いを修正するのに役立つツールですが、あなたが持っているものが明確で簡潔であり、(私の意見では)最良の方法であることを考えれば、それらのメッセージを無視するだけです。

0
追加された

このエラーは、関数の前の宣言で末尾にカンマがあるために発生しました。

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

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

(It was hard to find, but reinforces my opinion that linters are usually right, it's my code that's wrong. If I had disabled the warnings globally - or even in that spot - the bug still would have been present.)

0
追加された
これはこの質問と同じ警告ではありません。これは W030 であり、 W084 同様ですが、これはここでは無関係です。
追加された 著者 Emile Bergeron,

jshintは、あなたが本当に条件ブロックに代入を行うことを意図しているのか、それとも本当に比較の対象になっているのかを判断できません。他の人間も同じ疑念を抱く可能性があるという懸念がある。

イテレーターの場合、あなたは大丈夫だと思います。

0
追加された

Javascriptファイルの/* jshint expr:true */コメントを追加すると、警告は表示されなくなります。

0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript