2009-11-20 25 views
189

me encontré con la siguiente líneasigno de interrogación en JavaScript

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

¿Qué significan los ? y : en este contexto?

+0

parece estar evitando el establecimiento de saturación a 'Infinity' (causada por la división por cero). –

Respuesta

287

Se llama Conditional Operator (que es ternary operator).

Tiene la forma de: condition? value-if-true: value-if-false
Piense en el ? como "entonces" y : como "else".

Su código es equivalente a

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

"?" no es el operador ternario; "?:" es el operador ternario. Hablando sobre "?"como el operador ternario es como hablar de Abbott sin Costello, Laurel sin Hardy, Cheech sin Chong ... –

+10

Ok, vale ... ahora estoy usando un pronombre ambiguo, ¿contento? :) – Greg

+5

seguro. uno bueno ternario operador merece otra .... –

0

? : ¿No es este el operador ternario?

var x= expression ? true:false

+3

Ese es un ejemplo de su uso, pero en realidad hay una versión más corta de su extracto, para aquellos casos en los que solo quiere VERDADERO/FALSO: Si 'expresión' era solo una variable con un número o cadena, "var x =! ! expression "lo convertirá en un resultado booleano. –

29

correctamente entre paréntesis para mayor claridad, es

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

significa retorno de ya sea

  • 255*delta/max si Max! = 0
  • 0 si Max == 0
5

Esto es probablemente un poco más clara cuando se escribe con los soportes de la siguiente manera:

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

lo que hace es evaluar la parte de los primeros soportes. Si el resultado es verdadero, ¿entonces la parte después del? y antes de: se devuelve. Si es falso, entonces lo que sigue a: se devuelve.

7

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

? es un operador ternario, funciona como un caso en conjunción con el:

= significa que no es igual a

Por lo tanto, la forma larga de esta línea sería

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

tener cuidado con esto. A -1 se evalúa como verdadero, aunque -1! = Verdadero y -1! = Falso. Créeme, lo he visto suceder.

so

-1? "Verdadera cara": "lado falsa"

se evalúa como "verdadera cara"

+1

"En JavaScript, un valor ** truthy ** es un valor que se considera cierto cuando se evalúa en un contexto booleano. Todos los valores son verdaderos a menos que se definan como falsy (es decir, excepto para falso, 0, "", nulo, indefinido y NaN). "Es por eso que -1 se evalúa como verdadero. (Https: //developer.mozilla. org/en-US/docs/Glossary/Truthy) – jobmo

Cuestiones relacionadas