2

는 다음 사항을 고려 삼항 연산자
(편집 : 내가 사용을 제거하기 위해 약간의 기능을 수정 또는 삼항 연산자와 중괄호 한)우선 순위 : 논리 또는 대

function someFunction(start,end,step){ 
    var start = start || 1, 
     end = end || 100, 
     boolEndBigger = (start < end); // define Boolean here 
     step = step || boolEndBigger ? 1:-1; 
    console.log(step); 
} 

someFunction() 
// step isn't defined so expect (1<10) ? 1:-1 to evaluate to 1 

someFunction(1,10) 
// again step isn't defined so expect to log 1 as before 

문제 :


나는이 쉽게 사용 중괄호에 의해 고정되어 있음을 알고 있어요 :

function range(start,end,step){ 
    var start = start || 1, 
     end = end || 100, 
     step = step || ((start < end) ? 1:-1); 
    console.log(step); 
} 

질문 : 가 왜 || 운영자가이 경우에 지름길되지 않습니다 ?

나는 논리 OR 진 논리적 조건 연산자 중 가장 낮은 우선 순위를 가지고 있음을 알고 있어요하지만이 조건 삼항 연산자보다 우선 순위 높은 을 가지고 생각?

MDN docs for Operator precedence을 잘못 읽었습니까?

+4

"우선 순위가 높음"은 코드가'(step || (start

+0

"높은 우선 순위"는 먼저'||'가 평가된다는 것을 의미합니다. (시작 <끝)'이 먼저 평가됩니다. – Xufox

+0

@NiettheDarkAbsol : 삼원 항이 우선 ​​순위가 높다는 뜻인가요? MDN 워드 프로세서가 다르게 말하는 ... – Pineda

답변

5

예, || 연산자는 조건부 ?: 연산자보다 우선합니다. 즉, 먼저 실행됩니다. 당신이 연결 한 페이지에서 :

운영자 우선 순위는 운영자가 평가되는 순서를 결정합니다. 우선 순위가 더 높은 연산자가 먼저 평가됩니다. (MDN)

enter link description here은의 여기에 모든 작업을 살펴 ​​보자 :

step = step || (start < end) ? 1:-1; 

우선 순위가 가장 높은 운전자는 () 그룹화 작업입니다. 여기가 false 결과 :

step = step || false ? 1 : -1; 

다음으로 가장 높은 우선 순위는 논리 OR 연산자입니다. step은 진실이므로 step이됩니다.

step = step ? 1 : -1; 

이제 우리는 남은 유일한 삼중 연산을 수행합니다. 다시 step이 진실이므로 첫 번째 옵션이 실행됩니다.

step = 1; 
+1

나는 이것을 얻는다. 내가 얻지 못하는 이유는이 경우에 왼쪽 조건이 참일 때'|| '가 단축되지 않는다는 것입니다. – Pineda

+2

@ 피네다. 왼쪽 피연산자는'step'이고 오른쪽 피연산자는'false'입니다. 'false'는 절대로 실행되지 않습니다. – lonesomeday

+0

'step = step || 거짓? 1 : -1;'왜 false입니까? 1 : -1'은 여기에서 실행됩니다.'step = step || (false? 1 : -1); ' – Pineda