발췌문 1 :차이점 if (x) {foo(); } 및 x? foo() : 0;
if (x) {
foo();
}
코드 조각 2 :
x ? foo() : 0;
두 조각 사이의 차이는 무엇입니까?
편집 : 구문 오류가 수정되었습니다.
업데이트는 :
x && foo();
발췌문 1 :차이점 if (x) {foo(); } 및 x? foo() : 0;
if (x) {
foo();
}
코드 조각 2 :
x ? foo() : 0;
두 조각 사이의 차이는 무엇입니까?
편집 : 구문 오류가 수정되었습니다.
업데이트는 :
x && foo();
일반적으로 if
은 진술 (예 : 변수에 할당 할 수 없음)이고 삼중 연산자 ?:
은 표현식의 일부입니다 (변수에 할당 할 수있는 값을 산출 함).
또한 if
블록에는 명령문을 포함 할 수 있으며 ?:
의 구성 요소에는 표현식 만 포함 할 수 있습니다.
예를 들어, ?:
의 결과를 사용하지 않으므로 아무런 차이가 없습니다. 두 스 니펫은 x가 true 인 경우에만 foo()
을 평가합니다.
발췌문 # 2 그것 삼항 만들기 위해 필요한 : blah
이 부족하기 때문에 무효 인 ECMAScript의 표현이다 : BTW, 거기 더 짧은 표기법 것 같다.
편집 : 둘 다 foo
경우 x
이 truthy이다 호출, 정말 두 조각 사이에 차이가 없습니다. x
이 거짓 인 경우 (정의되지 않음/false/빈 문자열/0 /) 첫 번째 코드 단편은 아무 것도 평가하지 않고 후자 코드는 0
으로 평가되지만 0
은 실제로 스크립트에 아무런 영향을 미치지 않습니다.
난 당신이 (가)
// 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 나는이 기법을 좋아한다 :'if (x) {foo(); 대신'x && foo();' }'. 나는 그것을 기억할 것이다. :) –
물론 ... 그것이 내 제안 이었지만. 나는 그것을 사용하곤했지만 동료 개발자들은 그것을하지 않을 것이라고 확신했다. –
상관없이, 그것에 대해 알고있는 것이 좋다. –
또한 표현의 반환 값을 사용하고 있는지 널 (null) 검사에 대한 & &이
주를 사용하여 사랑, 블록 구문은 값으로 평가하지 않습니다 (그것은 표현이 아닙니다). 삼항 연산자는 값을 계산합니다. – cdhowie
@meder 질문을 업데이트했습니다 ... –
@cdhowie 네,하지만 삼항 식은 제 코드의 어떤 것에도 할당되지 않습니다. 그래서이 경우에는 차이가 없습니다. –