24

テストコードは次のとおりです。

console.log(true && "abc");//abc

結果が である理由を誰が教えてくれますabcか?

4

4 に答える 4

20

MDN (論理演算子)から- 論理積 (&&) :

false に変換できる場合は expr1 を返します。それ以外の場合は expr2 を返します。したがって、ブール値で使用すると、両方のオペランドが true の場合、&& は true を返します。それ以外の場合は false を返します。

true明らかに false と評価できないため、2 番目の値「abc」が返されます。

于 2012-07-18T14:33:15.343 に答える
10

JavaScriptの&&演算子は、C や Java などの演算子とは多少異なります。常に最後に評価された部分式の値を返し (式全体が true (「真実」) または false (「偽」) であるかどうか)、ブール値の結果を強制しません。 . 失敗した場合 (値の 1 つが「偽」である場合)、同様に、結果は生の値であり、値のブール解釈ではありません。

つまり、次のようになります: を指定A && Bすると、インタプリタは次のことを行います。

  1. 式 A を評価し、A V — A の値を与える
  2. A Bを A Vをブール値にキャストした結果とする
  3. A Bがの場合false、式の値&&は A V
  4. 式 B を評価して、B Vを与える
  5. B Vを式の値として返し&&ます。

したがって、ifステートメントでは、ステートメント自体が式の全体的な結果に対して真偽のテストを実行するため、式は C または Java のブールキャスト演算子&&と同じ効果があります。ifただし、単独で使用すると、「最初の式が真実である場合は 2 番目の式の値を教えてください。そうでない場合は、最初の式の値を教えてください」のようになります。

于 2012-07-18T14:31:16.770 に答える
1

&&左辺が と評価された場合は左辺を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
于 2012-07-18T14:32:39.330 に答える
1

!!()式を次のようにラップすることで、ある程度「修正」できます。

!!(true && 'abc');
于 2012-07-18T14:33:04.957 に答える