[javascript] “기타”가없는 JavaScript의 3 진 연산자

나는 항상 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.slideshowWidthobj.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 };