Знак питання та двокрапка у JavaScript


Відповіді:


363

Його називають умовним оператором (який є потрійним оператором ).

Вона має вигляд: condition? value-if-true: value-if-false
Подумайте ?як про "тоді" і :як про "інше".

Ваш код еквівалентний

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

27
"?" не потрійний оператор; "?:" є потрійним оператором. Говорячи про "?" тому що потрійний оператор - це як говорити про Ебботта без Костелло, Лорел без Харді, Чек без Чонга ....
Jason S

11
Ок, добре ... зараз я вживаю неоднозначне займенник, щасливий? :)
Грег

14
Щоб бути педантичним, це потрійний оператор, який , здається, є єдиним у більшості мов програмування. Будь-який оператор, який працює на 3 частини, є потрійним оператором, як additionі двійковий оператор, який працює над попередніми та наступними виразами (наприклад, 1 + 2 плюс діє на 1 і 2), або заперечення є одинарним оператором (наприклад, -x де значення x заперечується).
Davy8

6
@ Davy8: І цей умовний оператор можна назвати конкретним.
Механічний равлик

Що робити, якщо ви хотіли перевірити дві умови?
Танос Додд

38

Правильно в дужках для наочності це так

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

тобто повернення

  • 255*delta/max якщо макс! = 0
  • 0 якщо max == 0

7

Це, мабуть, трохи зрозуміліше, якщо писати дужками так:

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

Що це робиться - це оцінити частину в перших дужках. Якщо результат вірний, то частина після? і до: повертається. Якщо вона помилкова, то повертається те, що слідує за цим:


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: Якщо "вираз" був просто якоюсь змінною, у якій число або рядок, "var x = !! вираз "зробить це булевим результатом.
Скотт Лахтейн


-3

Будьте обережні з цим. А -1 оцінюється як істинне, хоча -1! = Істинно і -1! = Хибно. Повірте, я бачив, як це відбувається.

так

-1? "справжня сторона": "хибна сторона"

оцінює "справжню сторону"


3
"У JavaScript значення truthy - це значення, яке вважається істинним при оцінці в булевому контексті. Усі значення є truthy, якщо вони не визначені як хибні (тобто, за винятком помилкових, 0," ", null, undefined та NaN) . " Ось чому -1 оцінюється як істинна. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
роботамо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.