2010-12-02 3 views

답변

1

일반적으로 if은 진술 (예 : 변수에 할당 할 수 없음)이고 삼중 연산자 ?:은 표현식의 일부입니다 (변수에 할당 할 수있는 값을 산출 함).

또한 if 블록에는 명령문을 포함 할 수 있으며 ?:의 구성 요소에는 표현식 만 포함 할 수 있습니다.

예를 들어, ?:의 결과를 사용하지 않으므로 아무런 차이가 없습니다. 두 스 니펫은 x가 true 인 경우에만 foo()을 평가합니다.

8

발췌문 # 2 그것 삼항 만들기 위해 필요한 : blah이 부족하기 때문에 무효 인 ECMAScript의 표현이다 : BTW, 거기 더 짧은 표기법 것 같다.

편집 : 둘 다 foo 경우 x이 truthy이다 호출, 정말 두 조각 사이에 차이가 없습니다. x이 거짓 인 경우 (정의되지 않음/false/빈 문자열/0 /) 첫 번째 코드 단편은 아무 것도 평가하지 않고 후자 코드는 0으로 평가되지만 0은 실제로 스크립트에 아무런 영향을 미치지 않습니다.

+0

또한 표현의 반환 값을 사용하고 있는지 널 (null) 검사에 대한 & &이

var val = obj && obj.getValue(); 

주를 사용하여 사랑, 블록 구문은 값으로 평가하지 않습니다 (그것은 표현이 아닙니다). 삼항 연산자는 값을 계산합니다. – cdhowie

+0

@meder 질문을 업데이트했습니다 ... –

+0

@cdhowie 네,하지만 삼항 식은 제 코드의 어떤 것에도 할당되지 않습니다. 그래서이 경우에는 차이가 없습니다. –

3

난 당신이 (가)

// Why should I use 
if (x) { 
    do(); 
} 

// instead of 
x && do(); 

하거나 기록 된대로

// Why should I use 
if (x) { 
    do(); 
} else { 
    dont(); 
} 

//instead of 
x ? do() : dont() 

, 출력에 차이가없는 다음 물어 의미 생각합니다. 나는 세 가지를 사용하는 의미 때문에 & & 연산자와 & & 연산자를 사용하는 것을 좋아하지 않습니다. 삼자는 & & 표현처럼 사용하지 않는 값을 반환합니다. 따라서 나는 언어가 사용할 연산자를 의도하는 방식을 오히려 사용하고자한다.

그러나, 나는이 경우, 우리는

+1

+1 나는이 기법을 좋아한다 :'if (x) {foo(); 대신'x && foo();' }'. 나는 그것을 기억할 것이다. :) –

+0

물론 ... 그것이 내 제안 이었지만. 나는 그것을 사용하곤했지만 동료 개발자들은 그것을하지 않을 것이라고 확신했다. –

+0

상관없이, 그것에 대해 알고있는 것이 좋다. –

관련 문제