&& と || は通常、比較的単純なのでここでは説明しません。
次の議論のために 2 つのオブジェクトを準備します。
var alice = {
name: "alice" ,
toString: function () {
return this.name
}
}
var smith = {
name: "smith",
toString: function () {
return this.name
}
}
JavaScript では、&& はブール型に使用できるだけでなく、ブール型の結果のみを返すこともできません。
l 最初のオペランドがブール型で、値が false の場合は、直接 false を返します。
l 最初のオペランドがブール型で値が true、もう一方のオペランドがオブジェクト型の場合、このオブジェクトが返されます。
l 両方のオペランドがオブジェクト型の場合、2 番目のオブジェクトを返します。
l いずれかのオペランドが null の場合は、null が返されます。
l いずれかのオペランドが NaN の場合は、NaN を返します。
l 未定義のオペランドがある場合は、未定義を返します。
alert(false && alice); // false
alert(true && alice); // アリス
alert(alice && smith); >alert(smith && alice); // alice
alert(null && alice); // null
alert(NaN && alice); // NaN
alice); // 未定義
alert(alice && unknown); // 未定義
|| の場合、ブール型に使用されるだけでなく、ブール型の結果のみを返します。
実際には、null、未定義、NaN は false として扱われます。そして、オブジェクトは true として扱われます。
l 最初のオペランドがブール型で、値が true の場合は、直接 true を返します。
l 最初のオペランドの型が Boolean で、値が false で、2 番目のオペランドが object の場合、object オブジェクトが返されます。
l 両方のオペランドの型がオブジェクトの場合、最初のオブジェクトを返します。
l 両方のオペランドが null の場合、null が返されます。
l 両方のオペランドが NaN の場合は、NaN を返します。
l 両方のオペランドが未定義の場合は、未定義が返されます。
alert(
false || アリス);
alert(true
|| アリス) // true
alert(アリス || スミス) // アリス
;
alert(smith || アリス) // スミス
;
alert(
null
|| アリス); // アリス
alert(alice ||
null
); // アリス
alert(
null
|| null) // null
alert(NaN || アリス) // アリス
;
alert(alice || NaN) // アリス
;
alert(NaN || NaN); // NaN
alert(未定義 || アリス) // アリス
;
alert(アリス || 未定義) // アリス
;
alert(未定義 || 未定義) // 未定義
;
説明のこの部分を読むことをお勧めします。
a && b: a と b をブール型に変換し、論理 AND を実行します。 true は b を返し、false は a を返します a || a、b をブール型に変換し、論理和を実行します。true は a を返し、false は b を返します。変換ルール:
オブジェクトは true
ゼロ以外の数値は true
空でない文字列は true
その他は false
関連記事でまとめた以下の記事を参照してください。
js AND or 演算子 | | && 魔法の使い方
JS は AND または演算子の優先順位を使用して if else 条件判定式を実装します
JavaScript && および || アルゴリズムの代替使用スキル