論理和 (||)
var result = true || false;
論理 AND 演算と同様に、論理 OR はオペランドの 1 つがブール値でない場合、必ずしもブール値を返すわけではありません。この場合、次の規則に従います。
□ 最初のオペランドがオブジェクトの場合は、最初のオペランドを返します。
□ 両方のオペランドがオブジェクトの場合は、最初のオペランドを返します。
□ 両方のオペランドが null の場合、null を返します
□ 両方が未定義の場合は、未定義を返します。
□ 両方が NaN の場合、NaN を返します
「===」と「==」の違い
等価演算子 (==)
等価演算子は、比較の前に演算値に対して暗黙的な変換を実行します:オペランド値がブール値の場合、比較する前に数値に変換します
一方の演算値が文字列で、もう一方の演算値が数値の場合、文字列は Number() 関数を通じて数値に変換されます
一方の操作値がオブジェクトで、もう一方がオブジェクトではない場合、オブジェクトの valueOf() メソッドが呼び出され、結果が前述のルールに従って比較されます
null と unknown は等しい
演算値が NaN の場合、等価比較は false を返します
両方のオペランド値がオブジェクトの場合、それらが同じオブジェクトを指しているかどうかを比較します。等価演算子は、両方のオペランドが同じオブジェクトを指している場合は true を返し、それ以外の場合は false
を返します。
以下にそれぞれ説明します。
まず === について話しましょう。これは比較的単純です。次のルールは、2 つの値が === 等しいかどうかを判断するために使用されます:
1. 型が異なる場合は[等しくない]
2. 両方が数値で同じ値の場合、[等しい] (!例外) は、少なくとも 1 つが NaN の場合、[等しくない] ことを意味します。 (値が NaN であるかどうかを判断するには、isNaN() を使用してのみ判断できます)
3. 両方が文字列であり、各位置の文字が同じである場合は [等しい]、そうでない場合は [等しくない]。
4. 両方の値が true、または両方とも false の場合、[等しい]。
5. 両方の値が同じオブジェクトまたは関数を参照している場合は [等しい]、そうでない場合は [等しくない]。
6. 両方の値が null であるか、両方が未定義の場合、[等しい]。
1. 2 つの値の型が同じ場合、=== 比較を実行します。
2. 2 つの値のタイプが異なる場合、それらは等しい可能性があります。次のルールに従って型の変換と比較を実行します:
a. 一方が null で、もう一方が未定義の場合、[等しい]。
b. 一方が文字列で、もう一方が数値の場合、文字列を数値に変換して比較します。
c. いずれかの値が true の場合は 1 に変換して比較し、いずれかの値が false の場合は 0 に変換して比較します。
d. 一方がオブジェクトで、もう一方が数値または文字列の場合、オブジェクトを基本型の値に変換して比較します。オブジェクトは、toString メソッドまたは valueOf メソッドを使用して基本型に変換されます。 JS コアの組み込みクラスは toString の前に valueOf を試行しますが、toString 変換を使用する Date は例外です。非jsコアオブジェクト、Ling Shuo (もっと面倒です、よくわかりません)
e. 他の組み合わせは [等しくない] です。
null==未定義 true true==1 true
"NaN" ==NaN false $null==0 false
false==0 true NaN!=NaN true
つまり、「==」には等しい値のみが必要です。 「===」では、値と型の両方が等しい必要があります。