Вопросительный знак и двоеточие в 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!= 00
если макс == 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
}
То, на что вы ссылаетесь, называется тернарным оператором , по сути, это базовая проверка условия, которая может быть написана для выполнения операции, если блок кода в тернарной операции действителен, в противном случае по умолчанию используется резервный вариант.
Тернарная операция записывается в следующем синтаксисе:
condition ? exprIfTrue : exprIfFalse
-
condition
Выражение, значение которого используется в качестве условия. -
exprIfTrue
Выражение, которое оценивается, если условие оценивается как истинное значение (которое равно или может быть преобразовано в истинное). -
exprIfFalse
Выражение, которое выполняется, если условие ложно (то есть имеет значение, которое может быть преобразовано в ложное).
Пример
Возьмите приведенную ниже функцию, которая должна возвращать строку
Yes
если число, предоставленное функции, четное, в противном случае верните .
Объяснение
Операция выше разбита:
-
(num % 2 == 0)
| это простоif
Условие оператора, чтобы проверить, является ли выражение в скобках истинным. -
? "Yes"
Если операция истинна, заданный строковый литерал автоматически возвращается в результате этого выполнения. -
: "No"
Этоelse
предложение в этой операции, если условие не выполняется, тоNo
возвращается.
Будьте осторожны с этим. -1 оценивается как true, хотя -1!= True и -1!= False. Поверь мне, я видел, как это случилось.
так
-1? "истинная сторона": "ложная сторона"
оценивает "истинную сторону"