Javascriptの比較まとめ
3279 ワード
Javascriptアプリでは様々な比較がありますが、今日は3つの状況を整理して、一緒に勉強してきました.
1.二つのオブジェクトの比較
Javascriptの比較にはちょっと変わった特性が入り混じっています.簡単な比較を見に来ました.
このように操作すれば、
2.異なるタイプの比較
また、以下のような特殊なケースがあります.
数字と文字列演算子にとって、プラス記号と比較演算子の挙動は違います.プラス記号の演算子は文字列に偏りがありますが、操作数が文字列の場合は文字列に変換されます.一方、演算子を比較すると数字に偏りがありますが、2つの数字がすべて文字列である場合にのみ文字列の比較が行われます.上のnullとundefinedについて.....彼らの行動をどう説明するかはまだ分かりません.私も一応覚えておくしかないです.それらは特別ですから.
3.オブジェクトと元の値の比較
二つの比較が必要なオブジェクトの一つがjavascriptオブジェクトの一つが文字列である場合、ある程度のタイプ変換が行われます.何とかしてオブジェクトの値を元の値に変換します.一般的に
しかし、権威の手引きは以下の原則を与えています.参考にしてください.
元の値の変換JavaScript言語コアの内蔵クラスは、まず
以上はJavascriptの中の比較的にまとめました.ここで述べたように、javascriptを勉強する時に役立ちます.
1.二つのオブジェクトの比較
Javascriptの比較にはちょっと変わった特性が入り混じっています.簡単な比較を見に来ました.
//
> var a = 12
undefined
> var b = 12
undefined
> a == b
true
> a === b
true
//
> var c = []
undefined
> var d = []
undefined
> c == d
false
> c === d
false
上記の結果から、2つの元の値と比較対象のルールが少し違っているように見えます.2つのオブジェクトの値を比較すると、それらの値が同じでも、最後の結果は違っています.二つのオブジェクトを比較し、比較すべきは二つのオブジェクトの参照です.このように操作すれば、
> var m = {}
undefined
> n = m
{}
> n === m
true
二つの変数が同じオブジェクトを指すことを表します.だから、それらは同じです.2.異なるタイプの比較
また、以下のような特殊なケースがあります.
> 12 == "12"
true
> null == undefined
true
> undefined == false
false
> null == false
false
> null === undefined
false
なぜ整数が文字列に等しいのですか?これは、==(完全ではなく等しい)がタイプを比較していないため、比較前に比較が必要な値をタイプ変換します.ここでは文字列を数値の種類に変換して比較します.なぜこんなに肯定的ですか?私たちは実験をします.
> 1 + 2
3
> 1 + "2"
'12'
> 2 < "12"
true
> "2" < "12"
false
上記の例から、数値2は文字列12よりも小さいことが分かります.比較前に数値を文字列に変換した場合は、結果は「2」「12」です.まだ信じない?もう一つ例をあげます.
> "12d" > 12
false
> "12d" < 12
false
> "12d" == 12
false
> "12" < "12d"
true
これはなぜですか?12を文字列に変換するなら、12 dは12より大きいはずです.どうして比較してもfalseですか?次のような特殊な奴のせいだと思います.
> NaN < 1
false
> NaN > 1
false
NaNは何と比較してもfalseに戻ります.自分を含めて.変数を判断するには、NaNの一番いい方法はxです.xがtrueであれば、xはNaNであることを示す.ここでは12 dが数値タイプに変換されると特殊な文字を持ってNaNになり、数値タイプとはどのように比較してもfalseになります.数字と文字列演算子にとって、プラス記号と比較演算子の挙動は違います.プラス記号の演算子は文字列に偏りがありますが、操作数が文字列の場合は文字列に変換されます.一方、演算子を比較すると数字に偏りがありますが、2つの数字がすべて文字列である場合にのみ文字列の比較が行われます.上のnullとundefinedについて.....彼らの行動をどう説明するかはまだ分かりません.私も一応覚えておくしかないです.それらは特別ですから.
3.オブジェクトと元の値の比較
二つの比較が必要なオブジェクトの一つがjavascriptオブジェクトの一つが文字列である場合、ある程度のタイプ変換が行われます.何とかしてオブジェクトの値を元の値に変換します.一般的に
valueOf, toString
の2つの方法があります.以下は空のオブジェクトの変換の流れです.
//
> a = {}
{}
// 1. valueOf
> a.valueOf()
{}
// 2. toString 。( )
> a.toString()
'[object Object]'
> a == '[object Object]'
true
上は実は1つの内蔵の対象の転換の過程で、javascriptの構造です.まず、valueOf
を呼び出して変換します.得られた値が元の値ではない場合、toString
を呼び出して変換します.最後に得られた値は'[object Object]'
の変な値ですが、元の値です.変数aとこの値を等分して判断すれば、trueの結果が得られます.(崩壊されましたか?)しかし、権威の手引きは以下の原則を与えています.参考にしてください.
元の値の変換JavaScript言語コアの内蔵クラスは、まず
ValueO
f変換を試み、その後toString
を用いて変換する.日付クラスを除いて、toString
だけを使って変換します.これらはJavaScriptコアのオブジェクトではない場合、それぞれの実装によって定義された方法で元の値に変換されます.上の説明によれば.私たちのa={}は元の値と比較すると、valueOf
関数を先に呼び出します.その結果、{}は明らかに元の値ではないです.toString
を用いて変換される.最後にそれが変な結果になりました.でも、これは変な結果です.'[object Object]'
は確かに{}の元の値です.(文字列の文字数)以上はJavascriptの中の比較的にまとめました.ここで述べたように、javascriptを勉強する時に役立ちます.