programing

"else"가 없는 JavaScript의 3진 연산자

copyandpastes 2023. 2. 1. 22:14
반응형

"else"가 없는 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 절이 코드이고 3진 표현식이 식이며, 이는 값이 반환됨을 의미합니다.

이것은, 몇개의 것을 의미합니다.

  • 변수가 있는 경우에만 3진법을 사용합니다.=즉, 반환값을 할당하는 것입니다.
  • 반환된 값이 두 값 중 하나일 경우에만 3진 표현식을 사용합니다(적합한 경우 중첩 표현식 사용).
  • 식의 각 부분(?와 : 이후)은 부작용 없이 값을 반환해야 합니다(식).x = true는 모든 식에서 마지막 값이 반환되므로 true를 반환하지만 x도 변경되지만 x는 반환된 값에 영향을 주지 않습니다.)

요컨대 삼원식의 '올바른' 용법은

var resultofexpression = conditionasboolean ? truepart: falsepart;

예시를 대신해서condition ? x=true : null ;여기서 ternary 식을 사용하여 값을 설정합니다.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';

이 코드는defaults.slideshowWidth값:defaults.slideshowWidthtrue로 평가됩니다.obj.find('img').width() + 'px'을 사용하다

자세한 내용은 논리 연산자의 단락 평가를 참조하십시오.

var x = condition || null;

글을 쓸 수 있다

x = condition ? true : x;

따라서 조건이 false일 때 x는 변경되지 않습니다.

이 값은 다음과 같습니다.

if (condition) x = true

편집:

!defaults.slideshowWidth 
      ? defaults.slideshowWidth = obj.find('img').width()+'px' 
      : null 

몇 가지 대안이 있습니다.이것들이 더 낫거나 더 나쁘다고 말하는 것은 아닙니다.그냥 대안일 뿐입니다.

세 번째 파라미터로 null을 전달하면 기존 값이 null이기 때문에 동작합니다.조건을 수정하고 변경하면 더 이상 사실이 아닐 위험이 있습니다.이를 방지하기 위해 삼진수에서 두 번째 선택지로 Exising 값을 전달합니다.

!defaults.slideshowWidth = 
      ? defaults.slideshowWidth = obj.find('img').width()+'px' 
      : defaults.slideshowwidth 

안전하긴 하지만 보기엔 별로일 수도 있고 타이핑도 더 많이 할 수 있습니다.연습할 때, 나는 아마

defaults.slideshowWidth = defaults.slideshowWidth 
               || obj.find('img').width()+'px'

그럼 간단하게

    if (condition) { code if condition = true };

배열 또는 객체 선언의 내부 없이 3진 연산자를 사용하려면 ES6 확산 연산자를 사용합니다....():

const cond = false;
const arr = [
  ...(cond ? ['a'] : []),
  'b',
];
    // ['b']

오브젝트의 경우:

const cond = false;
const obj = {
  ...(cond ? {a: 1} : {}),
  b: 2,
};
    // {b: 2}

원본 소스

또한 "Nullish mergeing operator"(--)도 있습니다. "OR" 연산자와 비슷하게 작동하지만 null이거나 정의되지 않은 경우에만 왼쪽 식을 반환하고 다른 거짓 값에는 반환하지 않습니다.

예:

const color = undefined ?? 'black';   // color: 'black'
const color = '' ?? 'black';   // color: ''
const color = '#ABABAB' ?? 'black';   // color: '#ABABAB'

당신의 경우 3진 연산자를 중복으로 봅니다.변수를 식에 직접 할당하려면 || 및 & 연산자를 사용합니다.

!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null ;

다음과 같이 됩니다.

defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';

더 명확하고, 더 "자바스크립트" 스타일이에요

대신 가드의 표현을 사용하는 것을 고려할 수 있습니다(자세한 내용은 Michael Tiessen의 훌륭한 기사를 참조하십시오).

let let 렛츠고x해 보고 , 시험해 보고 싶은 표현, 시험해 보고 싶은 표현, 시험해 보고 싶은 하다.z.x 쓸 수 있어요.그런 다음 다음과 같이 쓸 수 있습니다.

y == x && z

ifx 말이다.yz 만약 ★★★★★★★★★★★★★★★★★★★★★.xy.

간단한 방법은 다음과 같습니다.

if (y == x) z;

엄밀히 말하면 뭐든 돌려줄 수 있어단, 라이너 1개라면 Ternary가 타이핑하기 쉽고 적어도 1글자 짧기 때문에 속도가 더 빠릅니다.

passTest?hasDriversLicense=true:0
if(passTest)hasDriversLicense=true

언급URL : https://stackoverflow.com/questions/2932754/ternary-operators-in-javascript-without-an-else

반응형