4

重複の可能性:
JavaScript: 「z=(x||y)」は非ブール値の「z=x?x:y」と同じですか?

次の 2 行のコードは JavaScript で同等ですか?

a = b ? b : c

a = b || c

私は表現したい:「bが真実ならaはbに割り当てられ、そうでなければaはcに割り当てられるべきだ」

どちらもまったく同じように機能すると思いますが、100%確実ではありません。

4

2 に答える 2

4

はい。この 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/

于 2013-01-31T00:37:48.093 に答える
1

論理演算子は通常、ブール (論理) 値で使用されます。存在する場合、ブール値を返します。ただし、&& と || は 演算子は実際には、指定されたオペランドのいずれかの値を返すため、これらの演算子を非ブール値で使用すると、非ブール値を返す可能性があります。

ref:論理演算子 - MDN

于 2013-01-31T00:46:33.153 に答える