Вопросительный знак в JavaScript

Я наткнулся на следующую строку

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

Что означают ? и : в этом контексте?

Ответ 1

Он называется Условный оператор (который является тернарным оператором).

Он имеет форму: condition? value-if-true: value-if-false
Подумайте о ? как "then" и : как "else".

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

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

Ответ 2

Правильно заключенная в скобки для ясности, это

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

означает возврат

  • 255*delta/max, если max!= 0
  • 0, если max == 0

Ответ 3

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

? является тернарным оператором, он работает как a, если в сочетании с:

!= означает, что не равно

Таким образом, длинная форма этой строки будет

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

Ответ 4

Это, вероятно, немного яснее, если записать с помощью скобок следующим образом:

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

Что он делает, это оценить часть в первых скобках. Если результат верен, то часть после? и перед возвратом:. Если оно ложно, то возвращается следующее:.

Ответ 5

? : - это не тернарный оператор?

var x= expression ? true:false

Ответ 6

Будьте осторожны с этим. A -1 оценивает значение true, хотя -1!= True и -1!= False. Поверьте мне, я видел, как это происходит.

так

-1? "истинная сторона": "ложная сторона"

оценивает "истинную сторону"