== [] ==![] trueに、およびJavaScriptの暗黙的な変換{} ==!結果は} {偽

 

ECMAScriptので==暗黙的な変換は、同様のタイプの第一の側面に変換された後、比較を行います。

①、いずれかのオペランドが最初--false変換値が0であり、そして真に変換され、変換平等を比較する前に、ブール値である場合;
オペランドが文字列、他のオペランドである場合、②数、比較等価前数値に最初の文字列である
オブジェクトがプリミティブ値が得られる前の規則に従ってのvalueOf()メソッドは、呼び出され③、オペランドが目標である場合、もう一方のオペランドではありません、オブジェクトはのvalueOf()メソッドを持っていない場合、比較は、toString()を呼び出します。

なお、のvalueOf()メソッドは、元のオブジェクトのブール値を返します。[] {}属し、参照型、JSスタック記憶変数が格納され、ヒープメモリ、変数の基本的なデータタイプがスタックに格納され、変数の参照データ型がヒープに格納され、参照アドレスデータ型は、スタック内に存在しますスタックから直接変数値の基本的な種類にアクセスするとき。参照型の変数にアクセスするときに、読み出しアドレスがアドレスからデータを抽出するために、スタックとスタックを開始します。

 !:今[] == [] trueと評価を見て

(1)オペレータの優先順位を,! 優先度が==よりも大きい場合、それは最初の[]を実行します!;!それは逆が真されているブール変数タイプ、ヌル、未定義のは、NaN、空の文字列(「」)に変換することができ、残りはfalseです。!だから、[]それはすなわち、[] == [] []はfalse ==と同等です、計算偽の結果である!;

!(2)①上記の規則によれば、[] == [] [] == 0と等価です。

(3)上記のルール③、[] .toString()= ''(空文字列)によります。

(4)②に上記の規則によれば、空の文字列の値が0である、[] ==![] = 0は、0に対応し、結果は真です。

要約すると:

[] == [] - > [] ==偽 - > [] == 0 - > '' == 0 - > 0 == 0 - >真!;

!== {}は{}同じトークンであるため、キーは} {.toString()である - >結果がNaN、NaNでの== 0 - >偽。

だから、同じトークン、

![] {} ==真;!になる== {} []理解することは非常に簡単で、その後falseの場合のために。

おすすめ

転載: www.cnblogs.com/jny1990/p/10956996.html