「それで、どのx
sが(true == x) === !!x
与えるだろうfalse
か?」
ブール変換が抽象等式比較アルゴリズムx
による変換と同じでない場合。
例は、空白のみの文字列です。
var x = " ";
そのブール変換はtrue
(空でない文字列の場合と同様に)ですが、その==
比較はfalse
、空白のみの文字列が数値に変換され0
、true
値が数値に変換され、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
これは確かに上記でリンクされたアルゴリズムのすべての詳細をキャプチャするわけではなく、オペランドに提供されるすべての値で同じではないため、「大雑把に」と言います。
オペランドの扱い方を理解する==
には、アルゴリズムを少し研究する必要があります。