1. 文字列や数値などの基本型の場合、 == と === の違いがあります
1) 異なる型間の比較、compare == "同じ型に変換した後の値を参照" "値" が等しいかどうか、=== 型が異なる場合、結果は等しくありません
2) 同じ型を比較し、"値" を直接比較すると、2 つの結果は同じになります
2. 高度な配列、オブジェクトなどの場合、== と === の型に違いはありません
「ポインタアドレス」を比較します
3. == と === の違い
1) == の場合、高度な型を基本型に変換し、「値」の比較を実行します
2) 型が異なるため、=== の結果は false になります
2 つのオブジェクトが等しいかどうかを判断するときに、3 つの等号 (===) を使用する場合、2 つの等号 (==) との違いは何ですか?簡単に言うと、「==」を使用する場合、双方の型が異なる場合、JSエンジンは同じ型に変換して比較しますが、「===」は型変換を行わないため、両側は同じタイプに属しておらず、明らかに等しくありません。例:
var a = 0, b = '0';
alert((a == b) + '--' + (a === b))
ログイン後にコピー
この時点で表示される結果は「true–false」です。
=== 判定ルール
- 型が異なる場合は[等しくない]
- 両方が数値で同じ値の場合は[等しい]、少なくとも 1 つが NaN の場合、[等しくない]。 (値が NaN かどうかを判断するには、isNaN() を使用するだけで判断できます)
- 両方が文字列で、各位置の文字が同じ場合は [等しい]、それ以外の場合は [等しくない]。
- 両方の値が true 、または両方が false の場合、[等しい]。
- 両方の値が同じオブジェクトまたは関数を参照している場合は [等しい]、そうでない場合は [等しくない]。
- 両方の値が null であるか、両方が未定義の場合、[等しい]。
== 判定ルール:
- 2つの値の型が同じ場合、===比較を行います。
- 2 つの値の型が異なる場合、それらは等しい可能性があります。型変換を実行し、次のルールに従って比較します:
- 一方が null で、他方が未定義の場合、[等しい]。
- 一方が文字列でもう一方が数値の場合、文字列を数値に変換して比較します。
- いずれかの値が true の場合は 1 に変換して比較し、いずれかの値が false の場合は 0 に変換して比較します。
- 一方がオブジェクトで、もう一方が数値または文字列の場合、オブジェクトを基本型の値に変換して比較します。オブジェクトは、toString メソッドまたは valueOf メソッドを使用して基本型に変換されます。 JS コアの組み込みクラスは toString の前に valueOf を試行しますが、toString 変換を使用する Date は例外です。非jsコアオブジェクト、としましょう(もっと面倒です、よくわかりません)
- 他の組み合わせは[等しくない]です。
true と false の変換には特別な注意を払う必要があります。例:
alert(true == 1); //ture
alert(true == 2); //false, true会转换成number,也就是1,当然 1 不等于 2
//可以使用 !! 来把一个数据类型转换为boolean型
alert(true == !!2) //true,!2 === false !(!=2) = !false = true
ログイン後にコピー
さらに、js では、変数が論理演算で使用される場合、変数には初期値がないか、その値は0、-0、null、""、false、未定義、または NaN の場合、値は false になります。それ以外の場合、その値は true です。