자바 스크립트 속기 삼항 연산자


102

이 중복 삼항 연산자 구문을 사용하는 대신 PHP 5.3에서 다음을 알고 있습니다.

startingNum = startingNum ? startingNum : 1

... 적용 가능한 경우 삼항 연산자에 대한 속기 구문을 사용할 수 있습니다.

startingNum = startingNum ?: 1

그리고 나는 자바 스크립트의 삼항 연산자에 대해 알고 있습니다.

startingNum = startingNum ? startingNum : 1

...하지만 속기가 있습니까?

답변:


176
var startingNumber = startingNumber || 1;

당신이 찾고있는 것과 같은 것, 정의되지 않은 경우 기본값은 어디입니까?

var foo = bar || 1; // 1
var bar = 2;
foo = bar || 1;     // 2

그건 그렇고, 이것은 객체를 포함한 많은 시나리오에서 작동합니다.

var foo = bar || {}; // secure an object is assigned when bar is absent

사실, 오늘 아침에 튀어 오르고 있습니다. 해결되었지만 알아 주셔서 감사합니다.
Brad Christie

1
||대신에 의미 하지 ??않습니까?
Rocket Hazmat 2012 년

2
감사! 니가 끝냈어. 이 인스턴스에서 실제로 개체를 사용하고 있습니다. :)
Web_Designer

8
궁금한 사람이라면 JS ||연산자가 true 또는 false를 반환하지 않고 첫 번째 'truthy'값을 반환 하기 때문에이 방법이 작동 합니다. 당신이 말 val0val1같이 undefined하고 val2있다 2, val3입니다 3. 첫 번째 '진정한'값이므로을 val0 || val1 || val2 || val3반환 2합니다.
Jake T.

2
이 관용구는 반 패턴 아닌가요? 0 또는 빈 문자열을 전달하면 'OR'표현식이이를 건너 뛰고 실제로 0 또는 빈 문자열을 원했던 기본값을 사용합니다.
Paul Trzyna

24

|| 만나는 첫 번째 진실 값을 반환하므로 C #과 유사한 병합 연산자로 사용할 수 있습니다. ??

startingNum = startingNum || 1;

더 다른 것보다 귀하의 설명과 같은 I
ajax333221

12

예, 있습니다 :

var startingNum = startingNum || 1;

일반적으로 문서에expr1 || expr2 언급 된대로 다음과 같은 방식으로 작동합니다 .

expr1로 변환 할 수 있는지 여부를 반환 합니다 true. 그렇지 않으면를 반환합니다 expr2. 따라서, 함께 사용될 때 Boolean값을 ||반환 true피연산자 인 경우 true; 둘 다 있으면을 false반환합니다 false.


이 말을하는 것이 더 정확하지 않은 if a is truthyif a is evaluated to true?
JaredPar

3
@JaredPar : 모호함을 피하기 위해 원래의 자세한 설명을 Mozilla Developer Network의 설명으로 대체했습니다. 덜 모호해야합니다.
Tadeck

2
var startingNum = startingNum || 1;

이 경우 OR 연산자를 사용할 수 있습니다.


2
startingNum = startingNum || 1

null과 같은 조건이있는 경우

startingNum = startingNum ? startingNum : null

당신이 사용할 수있는 '&&'

startingNum = startingNum && startingNum

그러나 거짓이 anything && null아닌 한 null로 평가되지 anything않습니까?
Petruza

예, 진실이 있으면 null로 평가됩니다. 만약 falsy 값의 falsy 평가합니다
a2441918

1

위의 답변이 정확합니다. JavaScript에서 다음 문 :

startingNum = startingNum ? otherNum : 1

다음과 같이 표현할 수 있습니다.

startingNum = otherNum || 1

여기에서 다루지 않는 또 다른 시나리오는 일치하지 않을 때 값이 false를 반환하도록하려는 경우입니다. 이에 대한 JavaScript 속기 :

startingNum = startingNum ? otherNum : 0

그러나 다음과 같이 표현할 수 있습니다.

startingNum = startingNum && otherNum

다른 사람들이 더 일반적인 답변을 찾고있는 경우를 대비하여 다른 시나리오를 다루고 싶었습니다.


다음과 같은 약어가 있습니까 x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24? ???
oldboy

@Anthony 아니요, 인 부분 innerWidth * 0.0375 > 24과 다르기 때문 if true입니다 innerWidth * 0.0375. 경우 속기에만 사용할 수 있습니다 expression to be evaluated와는 if true같은 값이다. 을 단축 할 수없는 이유도 마찬가지 x = someBoolean ? 'Heck yea!' : 'No way!'입니다.
deedub

@deedub 아니라, 사실 일 것 "속기"(youd가가가를 호출하는 경우)가Math.max(innerWidth * 0.0375, 24)
올드 보이

@Anthony 당신은 그것을 그렇게 부르지 않을 것입니다;) 그러나 Math.max당신의 사용 사례에서 삼항 연산자보다 더 잘 작동합니다.
deedub

1
" startingNum = startingNum ? otherNum : 1는 " 로 표현 될 수 있습니다 startingNum = otherNum || 1. 나는 이것을 테스트했다
oldboy

0

삼항을 만들려면 :

boolean_condition ? true_result : false_result

자바 스크립트에서는 다음을 수행 할 수 있습니다.

(boolean_condition && true_result ) || false_result;

예:

(true && 'green') || 'red';
=> "green"
(false && 'green') || 'red';
=> "red"

sooo x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24가 될거야 (innerWidth * 0.0375 > 24 && innerWidth * 0.0375) || 24?? 속기가 있으므로 innerWidth * 0.0375변수에 할당하는 것 외에 반복 할 필요가 없습니까 ???
oldboy

1
이 경우 Math.max( innerWidth * 0.0375 , 24 )우아하게 작동합니다. 보다 일반적인 경우에는 변수를 생성하는 것보다 가독성을 향상시키는 'somethingifiedInnerWidth'와 같은 설명적인 메서드를 생성하는 것이 좋습니다. 어떤 경우에는 (그 설명적인 이름의) 변수를 갖는 것이 더 읽기 쉬울 것이지만, 미래에는 '왜 이것이 곱해 지는가?'라는 질문이 나올 것입니다. 제기되지 않습니다.
xxjjnn

와우는 u에 대한 두 번째 인수를 제공 할 수 있다는 것을 몰랐습니다 Math.max. 매우 우아한 솔루션 !!
oldboy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.