"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.slideshowWidth
true로 평가됩니다.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
말이다.y
z
만약 ★★★★★★★★★★★★★★★★★★★★★.x
y
.
간단한 방법은 다음과 같습니다.
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
'programing' 카테고리의 다른 글
VueJs, ReferenceError: google이 정의되지 않았습니다. (0) | 2023.02.01 |
---|---|
프록시를 통해 CURL을 사용하는 방법 (0) | 2023.02.01 |
Java에서 String 클래스가 final로 선언된 이유는 무엇입니까? (0) | 2023.01.22 |
매우 기본적인 MySQL 코드가 작동하지 않습니다. (0) | 2023.01.22 |
MariaDB --init-BASH 스크립트에서 mysql을 호출할 때 명령어 (0) | 2023.01.22 |