JavaScript의 물음표 및 콜론


답변:


363

이를 조건부 연산자 ( 삼항 연산자 )라고합니다.

형식은 다음과 같습니다. condition? value-if-true: "then"및 "else"로 value-if-false
생각하십시오 .?:

귀하의 코드는

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

27
"?" 삼항 연산자가 아닙니다. "? :"는 삼항 연산자입니다. 에 대해 말하다 "?" 삼항 연산자는 하디없이 코스텔로없이 애보트, 로렐, 종없이 Cheech .... 얘기처럼 그대로
제이슨 S

11
알았어 ... 이제 모호한 대명사를 사용하고 있습니까? :)
Greg Greg

14
학자하기 위해, 그건 대부분의 프로그래밍 언어에서 하나 될 일이 삼항 연산자. 3 개 부분에서 작동하는 모든 연산자는 3 진 연산자입니다. 마치 앞의 식과 다음 식에서 작동하는 이진 연산자 (예 : 1 + 2 더하기 1과 2에서 작동) 또는 부정은 단항 연산자 (예 : -x)와 같습니다. x의 값이 무시되는 곳). addition
Davy8

6
@ Davy8 : 그리고 이것은 조건부 연산자 라고 할 수 있습니다 .
기계 달팽이

두 가지 조건을 확인하려면 어떻게해야합니까?
Thanos Dodd

38

명확성을 위해 적절하게 괄호로 묶었습니다.

hsb.s = (max != 0) ? (255 * delta / max) : 0;

의미 중 하나를 반환

  • 255*delta/max 최대 인 경우 = 0
  • 0 최대 == 0 인 경우

7

다음과 같이 대괄호로 쓸 때 약간 더 명확합니다.

hsb.s = (max != 0) ? (255 * delta / max) : 0;

그것이하는 일은 첫 번째 괄호 안의 부분을 평가하는 것입니다. 결과가 참이면? 뒤에 나오는 부분 그리고 :가 반환되기 전에. False이면 다음에 나오는 것이 반환됩니다.


7
hsb.s = max != 0 ? 255 * delta / max : 0;

?삼항 연산자입니다. if그것은와 함께 작동 합니다:

!= 같지 않다는 의미

따라서이 줄의 긴 형식은

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

1

? : 이것은 삼항 연산자가 아닌가?

var x= expression ? true:false


3
이것이 그 사용의 한 예이지만, 사실 TRUE / FALSE를 원할 경우에 더 짧은 버전의 진술이 있습니다. 'expression'이 숫자 나 문자열이있는 변수 인 경우 "var x = !! expression "을 사용하면 부울 결과가됩니다.
Scott Lahteine


-3

이것을 조심하십시오. -1! = true 및 -1! = false이지만 -1은 true로 평가됩니다. 날 믿어, 나는 그것이 일어난 것을 보았다.

그래서

-1 ? "진정한 측": "거짓 측"

"진정한"평가


3
"자바 스크립트에서 truey 값은 부울 컨텍스트에서 평가 될 때 true로 간주되는 값입니다. false로 정의되지 않은 경우 모든 값은 false입니다 (예 : false, 0," ", null, undefined 및 NaN 제외) " 이것이 -1이 true로 평가되는 이유입니다. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
jobmo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.