4

私はJavascriptの同等性を理解しようとしてきました。次の行が返される理由を教えてくださいfalse

alert((function a(){}) == (function a(){})) // false

しかし、次の場合からわかるように、は<戻りますfalse<=戻りますtrue。つまり、戻る==必要がありますtrueが、ですfalse。何か考えがありますか、なぜですか?

alert((function a(){}) < (function a(){})) // false
alert((function a(){}) > (function a(){})) // false
alert((function a(){}) <= (function a(){})) // true
alert((function a(){}) >= (function a(){})) // true
4

3 に答える 3

5

<、を使用して2つのオブジェクトを比較<=しており、実際には、それらが隠蔽される可能性のある文字列と比較されます。

"function a(){}" < "function a(){}"は偽です。

"function a(){}" <= "function a(){}"本当です。

編集:(function a(){}) == (function a(){}) falseを返す 理由==するために文字列や数値に変換する必要はありません。これらは2つの異なるオブジェクトです。

于 2012-07-14T05:08:49.153 に答える
1

あまり知られていない事実は、Javascriptの等式演算子は実際には===ではなく==であるということです。関数に対して比較演算子を実行すると、関数自体ではなく、参照の値(メモリ内の場所)が比較されます。関数はすべて別個のオブジェクトであるため、==はtrueを返しません。

「Javascript-TheDefinitiveGuide」からhttp://docstore.mik.ua/orelly/webprog/jscript/ch05_04.htm

一方、オブジェクト、配列、関数は参照によって比較されます。これは、2つの変数が同じオブジェクトを参照している場合にのみ等しいことを意味します。

于 2012-07-14T05:01:56.567 に答える
0

関数が等しくないことをテストすると、真になります。

alert((function a(){}) != (function a(){})) //true

これは、各関数が異なるオブジェクトであり、等価性チェックがfalseを返す理由です。

于 2012-07-14T05:18:16.010 に答える