JavaScriptの申請プロセス中に、さまざまな比較に遭遇します。今日、私はあなたのために3つの状況を編集し、一緒にそれらを学びました。
1。2つのオブジェクトの比較
JavaScriptの比較は、いくつかの奇妙な機能と混合されています。いくつかの簡単な比較を見てみましょう。
// raw値の比較> var a = 12undefined> var b = 12undefined> a == btrue> a === btrue //オブジェクトの比較> var c = [] undefined> var d = [] undefined> c == dfalse> c == dfalse
上記の結果から、2つの元の値を比較することは、オブジェクトの比較とは少し異なるように思われることがわかります。 2つのオブジェクトの値を比較すると、たとえその値が同じであっても、最終結果は異なります。 2つのオブジェクトを比較する場合、2つのオブジェクトの参照を比較する必要があります。
これを行う場合:
> var m = {}未定義> n = m {}> n === mtrueそれは、両方の変数が同じオブジェクトを指すため、同じであることを意味します。
2。さまざまなタイプの比較
また、次の特別な状況もあります
> 12 == "12" true> null == undefinedtrue> undefined == falsefalse> null == falsefalse> null === undefinedfalse
なぜ整数は文字列に等しいのですか?これは、==(一致していない、一致していない)がタイプを比較しないためです。比較する前に、比較する必要がある値を入力します。ここでは、文字列が数値型に変換され、比較されます。なぜそれはとても確信しているのですか?いくつかの実験をしましょう。
> 1 + 23> 1 + "2" '12'> 2 <"12" true> "2" <"12" false
上記の例から、値2は実際に文字列12よりも小さいことがわかります。値が文字列に変換される前に比較が文字列に変換された場合、結果は「2」> "12"になるはずです。
まだ信じられない?別の例を挙げましょう。
> "12d"> 12false> "12d" <12false> "12d" == 12false> "12" <"12d" true
なぜこれがなぜですか? 12を文字列に変換する場合、12Dは12を超えるはずですよね?なぜそれを偽と比較するのですか?下の特別な男のせいだと思います。
> nan <1false> nan> 1false
ナンが何と比較しても、それは虚偽を返します。それ自体を含む。したがって、変数がnanであるかどうかを判断する最良の方法は、返された場合、xはnanであることを意味します。ここでは、特殊文字を持ち、最終的にナンになるため、12Dが数値タイプに変換される場合になるはずです。数値タイプとどのように比較しても、結果は偽です。
数値演算子と文字列演算子の場合、プラス記号演算子は比較演算子とは異なる動作をします。プラス演算子は文字列を好み、オペランドの1つが文字列である場合、弦に変換されます。比較演算子は数値を好み、文字列比較は両方の数値が文字列である場合にのみ実行されます。
上記のnullおよび未定義について。 。 。 。 。当面の間、彼らの行動を説明する方法がわかりません。今のところしか覚えていません。彼らは特別だからです。
3。オブジェクトと元の値の比較
比較する必要がある2つのオブジェクトがJavaScriptオブジェクトとスケルトンである場合、ある程度の型変換が実行されます。オブジェクトの値を元の値に変換する方法を見つけます。一般的に言えば、2つの方法がありますvalueOf, toString 。以下は、空のオブジェクトの変換プロセスです。
//私はそれを直接書きました> a = {} {} //1。valueof変換> a.valueof(){} //2。上記の操作が生の値になった場合、toStringを使用して変換します。 (そしてその逆)> a.toString() '[object object]'> a == '[object object]' true上記は、実際には組み込みのオブジェクト変換プロセスとJavaScriptメカニズムです。最初に、変換のためにvalueOfを呼び出します。取得した値が原始値ではない場合、変換のためにtoStringを呼び出します。最終的な値は'[object Object]'ですが、非常に奇妙な値ですが、それは元の値です。変数Aとこの値が等しい場合(一致していない)、真の結果を取得できます。 (崩壊しましたか?)
ただし、権威あるガイドは次の原則を示しています。私たちはそれを参照できます。
RAW値JavaScript言語コアビルトインクラスを変換してください。最初にValueO fで変換してから、変換にtoStringを使用します。日付クラスを除き、変換にはtoStringのみを使用します。 JavaScriptのコアにないオブジェクトは、それぞれの実装で定義されている方法を通じて元の値に変換されます。
上記の説明によると。 a = {}を元の値と比較すると、最初にvalueOfを呼び出します。その結果、{}は明らかに原始値ではありません。次に、 toStringを使用して変換が実行されます。最後に、その奇妙な結果が出てきました。しかし、この奇妙な結果'[object Object]'は、確かに{}の元の値です。 (文字列の文字通りです)。
上記は、JavaScriptの比較要約です。この記事の説明がJavaScriptを学ぶとき、誰にとっても役立つことを願っています。