14

そこで、今日、私のチームのジュニア プログラマーが次のコードを書きました。

if(status === ("incomplete" || "unknown"))

これは明らかに彼が意図したことを行うつもりはありません。これは次のとおりです。

if(status === "incomplete" || status === "unknown"))

しかし、私が説明できないのは、コードの最初のスニペットが機能しない理由です! または、「ステータス」が「未完了」に設定されている場合は true に評価され、「不明」に設定されている場合は false に評価されるのはなぜですか...

4

3 に答える 3

21

JavaScript では、||演算子は、評価結果が, , , , またはtrueでない場合は最初のオペランドを返し、それ以外の場合は 2 番目のオペランドを返します。falsenullundefined""0

最初のケースでは、true と評価されるため、("incomplete" || "unknown")常に"incomplete"と評価されます。

条件全体は次のようになります。

if (status === "incomplete")

これは、観察している動作を説明しています。

于 2013-03-11T16:23:10.663 に答える
6

("incomplete" || "unknown")"incomplete"はと比較して を返しstatusます。

于 2013-03-11T16:23:17.813 に答える
3

しかし、私が説明できないのは、なぜ正確status === ("incomplete" || "unknown")に機能しないのかということです

これは、括弧内の式が最初に評価されるためです。空でない文字列incompleteは真であるため、OR 式 ("incomplete" || "unknown")が生成"incomplete"され、それのみがstatus変数と比較されます。

条件を短縮するには、値の配列、正規表現テストなどを含む多くの方法があります。

于 2013-03-11T16:23:52.053 に答える