2

JavaScriptにはさまざまな等価比較演算子があります

  • 同等==
  • 厳密に等しい===

また、論理否定 があり、基本的にはと同じように、!二重論理否定を使用することを考える傾向があります。!!xtrue == x

しかし、私はこれが常に当てはまるとはx = []限ら[]ないことを知って!ます==

それで、どのxsが(true == x) === !!xfalseを与えるでしょうか?あるいは、何が偽物である==がそうではない!!(またはその逆)のですか?

4

2 に答える 2

8

「それで、どのxsが(true == x) === !!x与えるだろうfalseか?」

ブール変換が抽象等式比較アルゴリズムxによる変換と同じでない場合。


例は、空白のみの文字列です。

var x = " ";

そのブール変換はtrue (空でない文字列の場合と同様に)ですが、その==比較はfalse、空白のみの文字列が数値に変換され0true値が数値に変換され、1それらの値が変換されないためです。同等。

x == true; // false
!!x;       // true

==または、比較している最終的な値を表示するには、次のようにします。

Number(true) == Number(x);
 //      1   ==        0

1 == 0; // false

の結果を表示するには!!x、次のようになります。

Boolean(x);  // true

したがって、元の式は大まかに次のように見ることができます。

   var x = " ";

   (Number(true) == Number(x)) === Boolean(x);
// (         1   ==        0 ) ===        true
//                   ( false ) ===        true

   false === true; // false

これは確かに上記でリンクされたアルゴリズムのすべての詳細をキャプチャするわけではなく、オペランドに提供されるすべての値で同じではないため、「大雑把に」と言います。

オペランドの扱い方を理解する==には、アルゴリズムを少し研究する必要があります。

于 2012-11-25T17:03:39.020 に答える
-1

ゆるい平等は真実とは何の関係もありません。

緩い等式の規則には、基本的に、.valueOf()各オブジェクトの関数の結果を比較することが含まれます。
詳細については、仕様を参照してください。

于 2012-11-25T17:01:08.787 に答える