次の 2 行のコードは JavaScript で同等ですか?
a = b ? b : c
a = b || c
私は表現したい:「bが真実ならaはbに割り当てられ、そうでなければaはcに割り当てられるべきだ」
どちらもまったく同じように機能すると思いますが、100%確実ではありません。
次の 2 行のコードは JavaScript で同等ですか?
a = b ? b : c
a = b || c
私は表現したい:「bが真実ならaはbに割り当てられ、そうでなければaはcに割り当てられるべきだ」
どちらもまったく同じように機能すると思いますが、100%確実ではありません。
はい。この 2 つはほぼ同じです。
どちらも最初に を評価しb
ます。それが真実なら、それは戻ってきますb
。それ以外の場合は、 が返されますc
。
@thesystem で指摘されているように、getter メソッドが onb
にある場合、3 項では 2 回呼び出されますが、or ステートメントでは 1 回だけ呼び出されます。
次のスニペットを使用してテストします。
var o = {};
o.__defineGetter__("b", function() {
console.log('ran');
return true;
});
var d = o.b || o.not;
console.log('-----');
var d = o.b ? o.b : o.not;
これがフィドルです:http://jsfiddle.net/bqsey/
論理演算子は通常、ブール (論理) 値で使用されます。存在する場合、ブール値を返します。ただし、&& と || は 演算子は実際には、指定されたオペランドのいずれかの値を返すため、これらの演算子を非ブール値で使用すると、非ブール値を返す可能性があります。
ref:論理演算子 - MDN