2009-11-20 2 views
189

я наткнулся на следующую строкувопросительный знак в JavaScript

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

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

+0

выглядит избежать настроек насыщенности 'Infinity' (вследствие деления на ноль). –

ответ

287

Это называется Conditional Operator (что является ternary operator).

Имеет форму: condition? value-if-true: value-if-false
Подумайте об ? как «затем» и : как «еще».

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

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

"?" не является тернарным оператором; «?:» - это тернарный оператор. Говоря о "?«как тернарный оператор, как говорить об Эбботе без Костелло, Лорел без Харди, Чич без Чонга ... –

+10

Хорошо, хорошо ... теперь я использую двусмысленное местоимение, счастливое? :) – Greg

+5

уверен, что один хороший тройной оператор заслуживает другого .... –

0

? : Это не трёхмерный оператор?

var x= expression ? true:false

+3

Это один из примеров его использования, но на самом деле есть более короткая версия вашего утверждения, для тех случаев, когда вы просто хотите TRUE/FALSE: если выражение было просто некоторой переменной с числом или строкой в ​​ней, «var x =! выражение "превратит его в логический результат. –

29

Правильно круглые скобки для ясности, это

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

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

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

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

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

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

7

hsb.s = макс! = 0? 255 * delta/max: 0;

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

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

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

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

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

so

-1? «Истинная сторона»: «ложная сторона»

принимает значение «истинно сторона»

+1

«В JavaScript значение ** правдиво ** является значением, которое считается правда при оценке в булевом контексте. Все значения являются правдивыми, если только они не определены как ложные (т. Е. Кроме false, 0, "", null, undefined и NaN). Поэтому -1 оценивается как истина (https: //developer.mozilla. орг/EN-US/документы/Глоссарий/Truthy) – jobmo

Смежные вопросы