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

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

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

Что делать ? а также : значит в этом контексте?

8 ответов

Решение

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

Он имеет вид: condition? value-if-true: value-if-false
Думать о ? как "тогда" и : как "еще".

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

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

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

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

означает возвращение либо

  • 255*delta/max если max!= 0
  • 0 если макс == 0

hsb.s = max!= 0? 255 * дельта / макс: 0;

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

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

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

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

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

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

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

? : разве это не троичный оператор?

var x= expression ? true:false

?: это сокращенное условие для else {} а также if(){} проблемы. Итак, ваш код взаимозаменяем с этим:

if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

MDN - условный (троичный) оператор

То, на что вы ссылаетесь, называется тернарным оператором , по сути, это базовая проверка условия, которая может быть написана для выполнения операции, если блок кода в тернарной операции действителен, в противном случае по умолчанию используется резервный вариант.

Тернарная операция записывается в следующем синтаксисе:

      condition ? exprIfTrue : exprIfFalse
  • conditionВыражение, значение которого используется в качестве условия.
  • exprIfTrueВыражение, которое оценивается, если условие оценивается как истинное значение (которое равно или может быть преобразовано в истинное).
  • exprIfFalseВыражение, которое выполняется, если условие ложно (то есть имеет значение, которое может быть преобразовано в ложное).

Пример

Возьмите приведенную ниже функцию, которая должна возвращать строку Yesесли число, предоставленное функции, четное, в противном случае верните .

Объяснение

Операция выше разбита:

  • (num % 2 == 0)| это просто ifУсловие оператора, чтобы проверить, является ли выражение в скобках истинным.
  • ? "Yes"Если операция истинна, заданный строковый литерал автоматически возвращается в результате этого выполнения.
  • : "No"Это elseпредложение в этой операции, если условие не выполняется, то Noвозвращается.

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

так

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

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

Другие вопросы по тегам