나는 항상 null
아무것도없는 조건 을 넣어야 했습니다. 어쨌든 주위에 있습니까? 예 :
condition ? x = true : null;
기본적으로 할 수있는 방법이 있습니까?
condition ? x = true;
이제 구문 오류로 표시됩니다
참고로 다음은 실제 예제 코드입니다.
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
답변
우선, 삼항 표현식은 if / else 구문을 대체하지 않습니다 . 이는 값 을 리턴 하는 if / else 구문과 같습니다 . 즉, if / else 절은 코드이고 삼항 표현식은 expression 이므로 값을 리턴합니다.
이것은 여러 가지를 의미합니다.
- 왼쪽에
=
반환 값이 할당 될 변수가있는 경우에만 삼항식을 사용 하십시오. - 반환 된 값이 두 값 중 하나 일 경우 삼항 식만 사용하십시오 (또는 적합한 경우 중첩 식 사용).
- 표현식의 각 부분 (? 및 이후 :)은 부작용없이 값을 리턴해야합니다 (
x = true
모든 표현식이 마지막 값을 리턴 할 때 표현식 이 true를 리턴하지만 x가 리턴 된 값에 영향을주지 않고 x를 변경 함)
간단히 말해서 삼항식의 ‘올바른’사용은
var resultofexpression = conditionasboolean ? truepart: falsepart;
삼항식을 condition ? x=true : null ;
사용하여의 값을 설정하는 예제 대신 다음을 사용할 x
수 있습니다.
condition && (x = true);
이것은 여전히 표현식이므로 유효성 검사를 통과하지 못할 수 있으므로 더 나은 접근 방식은
void(condition && x = true);
마지막은 유효성 검사를 통과합니다.
그러나 다시 예상 값이 부울 인 경우 조건식 자체의 결과 만 사용하십시오.
var x = (condition); // var x = (foo == "bar");
업데이트
샘플과 관련하여 아마도 더 적합 할 것입니다.
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
답변
아니요, 세 개의 피연산자가 필요합니다. 그래서 그들은 삼항 이라고합니다 연산자 입니다.
그러나 당신이 당신의 모범으로 가지고있는 것을 위해, 당신은 이것을 할 수 있습니다 :
if(condition) x = true;
앞으로 둘 이상의 명령문을 추가해야하는 경우 중괄호를 사용하는 것이 더 안전하지만
if(condition) { x = true; }
편집 : 이제 질문이 적용되는 실제 코드를 언급했습니다.
if(!defaults.slideshowWidth)
{ defaults.slideshowWidth = obj.find('img').width()+'px'; }
답변
더 자주 사람들은 논리 구문을 사용하여 명령문 구문을 단축합니다.
!defaults.slideshowWidth &&
(defaults.slideshowWidth = obj.find('img').width()+'px');
그러나 특별한 경우 구문이 더 간단 할 수 있습니다
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
이 코드 는가 true로 평가 defaults.slideshowWidth
되면 값 을 반환하고 그렇지 않으면 값을 반환합니다.defaults.slideshowWidth
obj.find('img').width()+'px'
자세한 내용 은 논리 연산자의 단락 평가 를 참조하십시오.
답변
var x = condition || null;
답변
당신은 쓸 수 있습니다
x = condition ? true : x;
따라서 조건이 거짓 일 때 x는 수정되지 않습니다.
이것은 다음과 같습니다
if (condition) x = true
편집하다:
!defaults.slideshowWidth
? defaults.slideshowWidth = obj.find('img').width()+'px'
: null
몇 가지 대안이 있습니다-나는 이것이 더 좋고 나쁘다는 것을 말하지 않습니다-단지 대안
기존 값이 널이므로 세 번째 매개 변수가 작동 할 때 널을 전달합니다. 조건을 리팩토링하고 변경하면 더 이상 사실이 아닐 위험이 있습니다. 삼항 경비원의 두 번째 선택으로 연장 가치를 전달 :
!defaults.slideshowWidth =
? defaults.slideshowWidth = obj.find('img').width()+'px'
: defaults.slideshowwidth
더 안전하지만,보기에는 좋지 않으며 타이핑이 더 많습니다. 실제로, 나는 아마 쓸 것입니다
defaults.slideshowWidth = defaults.slideshowWidth
|| obj.find('img').width()+'px'
답변
귀하의 경우 삼항 연산자가 중복으로 간주됩니다. ||, && 연산자를 사용하여 변수를 표현식에 직접 지정할 수 있습니다.
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null ;
될 것입니다 :
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
더 명확합니다. 더 “자바 스크립트”스타일입니다.
답변
간단히
if (condition) { code if condition = true };