я наткнулся на следующую строкувопросительный знак в JavaScript
hsb.s = max != 0 ? 255 * delta/max : 0;
Что сделайте ?
и :
означает в этом контексте?
я наткнулся на следующую строкувопросительный знак в JavaScript
hsb.s = max != 0 ? 255 * delta/max : 0;
Что сделайте ?
и :
означает в этом контексте?
Это называется Conditional Operator (что является ternary operator).
Имеет форму: condition
? value-if-true
: value-if-false
Подумайте об ?
как «затем» и :
как «еще».
Ваш код эквивалентен
if (max != 0)
hsb.s = 255 * delta/max;
else
hsb.s = 0;
"?" не является тернарным оператором; «?:» - это тернарный оператор. Говоря о "?«как тернарный оператор, как говорить об Эбботе без Костелло, Лорел без Харди, Чич без Чонга ... –
Хорошо, хорошо ... теперь я использую двусмысленное местоимение, счастливое? :) – Greg
уверен, что один хороший тройной оператор заслуживает другого .... –
? :
Это не трёхмерный оператор?
var x= expression ? true:false
Это один из примеров его использования, но на самом деле есть более короткая версия вашего утверждения, для тех случаев, когда вы просто хотите TRUE/FALSE: если выражение было просто некоторой переменной с числом или строкой в ней, «var x =! выражение "превратит его в логический результат. –
Правильно круглые скобки для ясности, это
hsb.s = (max != 0) ? (255 * delta/max) : 0;
означает возвращение либо
255*delta/max
если не более! = 00
если макс == 0Это, вероятно, немного яснее, когда написано с кронштейнами следующим образом:
hsb.s = (max != 0) ? (255 * delta/max) : 0;
Что она делает это оценить участие в первых скобках. Если результат верен, то часть после? и перед возвратом:. Если оно ложно, то возвращается следующее:.
hsb.s = макс! = 0? 255 * delta/max: 0;
? является тройная оператор, он работает как бы в сочетании с:
= означает не равно
Таким образом, длинная форма этой линии будет
if (max != 0) { //if max is not zero
hsb.s = 255 * delta/max;
} else {
hsb.s = 0;
}
Будьте осторожны с этим. A -1 оценивает значение true, хотя -1! = True и -1! = False. Поверьте мне, я видел, как это происходит.
so
-1? «Истинная сторона»: «ложная сторона»
принимает значение «истинно сторона»
«В JavaScript значение ** правдиво ** является значением, которое считается правда при оценке в булевом контексте. Все значения являются правдивыми, если только они не определены как ложные (т. Е. Кроме false, 0, "", null, undefined и NaN). Поэтому -1 оценивается как истина (https: //developer.mozilla. орг/EN-US/документы/Глоссарий/Truthy) – jobmo
выглядит избежать настроек насыщенности 'Infinity' (вследствие деления на ноль). –