2016-11-16 8 views
1

JavaScriptで論理演算子を使用すると短絡評価がどのように機能するのか理解していますが、私は完全には奇妙なエッジケースわかる。 a短絡論理または文、インライン三項と組み合わせて

const a = 'a' || 'b';

'a'の値を有する:

ので、このスニペットは、私が期待するように動作します。

そしてもちろん

、これも私が期待するように動作します: a

const a = false || 'b';

'b'の値を持ちます。

しかし、私はこのような表現で、この奇妙な状況に遭遇しました:

const a = true || true || true ? 'a' : 'b';

aは今'a'の値を持っています。

const a = true || false || true ? 'a' : 'b';

aまだ'a'の値を持っている:私のような他の組み合わせは、試してみました。しようとする

もう一つは、このようなものです:

const fn =() => true ? 'a' : 'b'; 
const a = true || fn(); 

そしてもちろんatrueの値を持ち、かつfnが呼び出されることはありません。

ここでは何が起こっていますか?

+3

操作の順序... 'true ||真実||本当ですか? 'a': 'b''は '(true || true || true)と等価ですか? 'a': 'b'' – JJJ

答えて

1

logical OR ||は、左から右に評価され、truthy valueと評価される最初の値が返されます。いずれも評価されない場合、最後の値はtrueです。

true || true || false 

結果、ternary operatorの第1の表現は、この場合'a'において、評価される:この場合

、最初trueは自明従って全体条件はtrueを返し、trueと評価します

const a = true || true || true ? 'a' : 'b'; 

このため、a'a'になります。

リストされた他のケースでも同じロジックが適用されます。

関連する問題