テストコードは次のとおりです。
console.log(true && "abc");//abc
結果が である理由を誰が教えてくれますabc
か?
MDN (論理演算子)から- 論理積 (&&) :
false に変換できる場合は expr1 を返します。それ以外の場合は expr2 を返します。したがって、ブール値で使用すると、両方のオペランドが true の場合、&& は true を返します。それ以外の場合は false を返します。
true
明らかに false と評価できないため、2 番目の値「abc」が返されます。
JavaScriptの&&
演算子は、C や Java などの演算子とは多少異なります。常に最後に評価された部分式の値を返し (式全体が true (「真実」) または false (「偽」) であるかどうか)、ブール値の結果を強制しません。 . 失敗した場合 (値の 1 つが「偽」である場合)、同様に、結果は生の値であり、値のブール解釈ではありません。
つまり、次のようになります: を指定A && B
すると、インタプリタは次のことを行います。
false
、式の値&&
は A V&&
ます。したがって、if
ステートメントでは、ステートメント自体が式の全体的な結果に対して真偽のテストを実行するため、式は C または Java のブールキャスト演算子&&
と同じ効果があります。if
ただし、単独で使用すると、「最初の式が真実である場合は 2 番目の式の値を教えてください。そうでない場合は、最初の式の値を教えてください」のようになります。
&&
左辺が と評価された場合は左辺をfalse
返し、それ以外の場合は右辺のサイズを返します。
true
ではないfalse
ので、文字列である右側を返します。
> 0 && true // LHS is false, return LHS
0
> 1 && true // LHS is true, return RHS
true
> false && 0 // LHS is false, return LHS
false
> true && false // LHS is true, return RHS
false
!!()
式を次のようにラップすることで、ある程度「修正」できます。
!!(true && 'abc');