대체 [복제] 인 경우 자바 스크립트
-
18-09-2019 - |
문제
이 질문은 이미 여기에 답이 있습니다.
- 자바 스크립트의 물음표와 콜론 7 답변
이 코드는 무엇을 나타내나요? 나는 그것이 일종의라는 것을 알고 있습니다 if
대체 구문 ...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
업데이트:
이런 종류의 코딩에 필요한 것은 무엇입니까? 이것은 동일한 효율성을 가진 더 효율적이거나 단축 된 버전입니까?
해결책
그것은 가정 어구 연산자는 다음과 같은 것과 같습니다.
if (pattern.Gotoccurance.score != null) {
pattern.Gotoccurance.score;
} else {
'0';
}
그러나 다음과 같이 게시 한 코드에 과제 명세서가 누락되었다고 생각합니다.
var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';
그만큼 score
변수가 다음에 할당됩니다 pattern.Gotoccurance.score
NULL이 아닙니다 :
var score;
if (pattern.Gotoccurance.score != null) {
score = pattern.Gotoccurance.score;
} else {
score = '0';
}
JavaScript에서 이러한 종류의 '기본값'할당을 수행하는 일반적인 패턴은 논리 또는 연산자를 사용하는 것입니다.||
) :
var score = pattern.Gotoccurance.score || '0';
의 가치 pattern.Gotoccurance.score
에 할당됩니다 score
해당 값이 아닌 경우에만 변수 거짓 (거짓 가치는입니다 false
, null
, undefined
, 0
, 제로 길이 문자열 또는 NaN
).
그렇지 않으면 거짓 인 경우 '0'
할당됩니다.
업데이트: 성능은 동일하며, 가독성에 중점을 두어야합니다. 저는 매우 간단한 표현식에서 Ternary Operator를 사용하려고 노력하며 형식을 개선하여 두 줄로 분할하여 더 읽기 쉬운 다음을 수행 할 수 있습니다.
var status = (age >= 18) ? "adult"
: "minor";
관련 질문 :
다른 팁
이것은 3 배 운영자, 진술이면 할 수있는 방법.
다시 작성하면 다음과 같습니다.
if (pattern.Gotoccurance.score != null) {
return pattern.Gotoccurance.score;
} else {
return '0';
}
이를 3 배 운영자라고합니다.
질문 업데이트에 "이런 종류의 코딩이 필요한 이유는 무엇입니까?"
때때로 3 원 운영자를 사용하여 복잡성을 줄일 수 있습니다.
예를 들어, 나는 그것을 확인 해야하는 웹 페이지가 있습니다. 적어도 세 개의 특정 텍스트 필드 중 2 개가 값을 입력했습니다. IF/Else Logic은 꽤 추악 해 보였지만, 3 배의 운영자는 몇 개의 필드 수를 결정하기 위해 하나의 라이너로 만들었습니다.
var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
(lastName.length > 0 ? 1 : 0) +
(zipCode.length > 0 ? 1 : 0) );
if (numberFilledInFields < 2)
{
validation = false;
return;
}
이 솔루션은 일부 대안보다 매우 우아하고 읽기 쉬운 것으로 보입니다.
3 원 운영자/조건부 운영자입니다.
수학에서, a 3 배의 운영 n = 3의 n-ary 작업입니다. 세트 A의 3 가지 작업은 A의 3 가지 요소를 취하고 결합하여 A의 단일 요소를 형성합니다.
그것은 if..else의 짧은 손 형태입니다
예 : 숫자가 고른지 여부를 알고 싶어
// if..else 접근법 사용
function CheckEvenOdd()
{
var number = 2;
if(number %2 == 0) alert("even");else alert("odd");
}
// Ternary 사용
function CheckEvenOdd()
{
var number = 2;
alert((number %2 == 0)?"even":"odd");
}
하나의 변형은 스위치입니다
// 스위치 사용
function CheckEvenOdd()
{
var number = 2;
switch(number %2)
{
case 0:alert("even");break;
default:alert("odd");break;
}
}
이제 설명한 것과 같이 간단한 if..else 조건이 있다면 Ternary를 계속 진행할 수 있습니다.
그러나 조건부 점검이 복잡해지면 If..else 또는 스위치로 가독으로 가십시오.
예를 들어, 3 차 연산자를 사용하여 최소 또는 최대 두 숫자를 수행하기는 쉽지만 3 개 이상의 숫자 중에서 가장 크고 두 번째로 큰 것을 찾기 위해 서투른 것이며 권장되지는 않습니다. 대신 .. else를 사용하는 것이 좋습니다