Signo de interrogación y dos puntos en JavaScript [duplicado]

Resuelto Inaimathi asked hace 15 años • 8 respuestas

Me encontré con la siguiente línea

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

¿Qué significan ?y :en este contexto?

Inaimathi avatar Nov 20 '09 23:11 Inaimathi
Aceptado

Se llama Operador Condicional (que es un operador ternario ).

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

Su código es equivalente a

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;
Greg avatar Nov 20 '2009 16:11 Greg

Bien entre paréntesis para mayor claridad, es

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

significado regresar cualquiera

  • 255*delta/maxsi máximo! = 0
  • 0si máx == 0
Jason S avatar Nov 20 '2009 16:11 Jason S
hsb.s = max != 0 ? 255 * delta / max : 0;

?es un operador ternario. Funciona como un ifconjunto con el:

!=significa 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;
}
CaffGeek avatar Nov 20 '2009 16:11 CaffGeek

Probablemente esto quede un poco más claro cuando se escribe entre corchetes de la siguiente manera:

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

Lo que hace es evaluar la parte que está en los primeros paréntesis. Si el resultado es verdadero, entonces la parte después de ? y antes de que se devuelva:. Si es falso, se devuelve lo que sigue a:.

Nikolas Stephan avatar Nov 20 '2009 16:11 Nikolas Stephan

?: es una condición abreviada para else {}problemas if(){}. Entonces tu código es intercambiable con este:

if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

MDN - Operador condicional (ternario)

PIZZZZZZZZZZZA is here avatar Feb 16 '2019 17:02 PIZZZZZZZZZZZA is here