Javascriptの中の&和𞓜


次の議論のために2つのオブジェクトを用意します.
var alice = {
    name: "alice",
    toString: function () {
        return this.name;
    }
}
var smith = {
    name: "smith",
    toString: function () {
        return this.name;
    }
}
javascriptでは、&&に対してbollanタイプだけでなく、Booleanタイプの結果にも戻ります.
1.最初の操作数がBooleanタイプであり、値がfalseであれば、直接falseに戻ります.
2.最初の操作数がBooleanタイプで、かつ値がtrueであり、もう一つの操作数がobjectタイプであれば、このオブジェクトに戻ります.
3.両方の操作数がobjectタイプの場合、2番目のオブジェクトに戻ります.
4.任意の操作数がnullであれば、nullに戻ります.
5.いずれかの動作数がNaNであれば、NaNに戻ります.
6.任意の操作数がundefindedであれば、undefinedに戻ります.
alert(false && alice);         // false
alert(true && alice);          // alice
alert(alice && smith);         // smith
alert(smith && alice);         // alice
alert(null && alice);          // null
alert(NaN && alice);           // NaN
alert(undefined && alice);     // undefined
alert(alice && undefined);     // undefined
 
        |𞓜にとっても同様にBooleanタイプだけでなく、Booleanタイプの結果を返します.
実際、null、undefined、NaNはfalseと見なされ、対象はtrueとされます.
1.最初の操作数がbootleanタイプで、かつ値がtrueであれば、直接trueに戻ります.
2.最初の操作数がBooleanタイプであり、値がfalseであり、第二の操作数がobjectである場合、objectオブジェクトに戻ります.
3.両方の操作数がobjectタイプの場合、最初のオブジェクトに戻ります.
4.両方の操作数がnullであれば、nullに戻ります.
5.二つの操作数が全部NaNなら、NaNに戻ります.
6.両方の操作数がundefinedであれば、undefinedに戻ります.
alert(false || alice);         // alice
alert(true || alice);          // true
alert(alice || smith);         // alice
alert(smith || alice);         // smith
alert(null || alice);       // alice
alert(alice || null);       // alice
alert(null || null);        // null
alert(NaN || alice);        // alice
alert(alice || NaN);        // alice
alert(NaN || NaN);          // NaN
alert(undefined || alice);     // alice
alert(alice || undefined);     // alice
alert(undefined || undefined); // undefined