Signo de interrogación y dos puntos en JavaScript

Me encontré con la siguiente línea

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

Que hace el ? y : significa en este contexto?

Se llama operador condicional (que es un operador ternario ).

Tiene la forma de: condition ? value-if-true : value-if-false
Piense en el ? como “luego” y : como “else”.

Tu código es equivalente a

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

Correctamente entre paréntesis para mayor claridad, es

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

es decir, regresar

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

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

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

! = significa que no es igual

Entonces, 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; } 

Esto es probablemente un poco más claro cuando se escribe con corchetes de la siguiente manera:

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

Lo que hace es evaluar la parte en los primeros corchetes. 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.

? : ? : ¿no es este el operador ternario?

var x= expression ? true:false

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

asi que

-1? “lado verdadero”: “lado falso”

evalúa al “lado verdadero”