2016-11-16 8 views
1

JavaScript에서 논리 연산자 또는 연산자를 사용할 때 단락 회로 평가가 작동하는 방식을 이해하지만 이상한 가장자리 인 것처럼 보입니다. 알다. a단락 회로 논리 또는 명령문, 인라인 삼원 문자와 결합

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

'a'의 값을 갖는

그래서,이 조각은 내가 기대할 수있는 방식으로 작동합니다.

그리고 물론

,이 또한 내가 기대하는 방식으로 작동 : a

const a = false || 'b';

'b'의 값을 갖는.

그러나, 나는 이런 식으로 이상한 상황으로 실행했습니다 :

a 지금 'a'의 값이

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

.

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

a 여전히 'a'의 값이 : 나는 같은 다른 조합을 시도했습니다. 시도

또 다른 것은이 같은 것입니다 :

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

물론 a

true의 값을 가지고 있으며, fn가 호출되지 않습니다.

여기 무슨 일 이니?

+3

작업 순서 ... 'true || 사실 || 사실입니까? 'a': 'b''는'(true || true || true)와 동일합니까? 'a': 'b '' – JJJ

답변

1

logical OR ||은 왼쪽에서 오른쪽으로 평가되고 truthy value으로 평가되는 첫 번째 값이 반환되며, 둘 중 아무 것도 true으로 평가되지 않으면 마지막 값이 반환됩니다.

결과
true || true || false 

에서, ternary operator의 첫번째 식을 평가하고, 'a'이 경우 :이 경우

, 제 true은 사소하므로 전체 조건 true가 반환 true 평가

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

이 이유 때문에 a'a'입니다.

나열된 다른 사례에도 동일한 논리가 적용됩니다.