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?
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?
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;
"?" 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 ... –
Ok, vale ... ahora estoy usando un pronombre ambiguo, ¿contento? :) – Greg
seguro. uno bueno ternario operador merece otra .... –
? :
¿No es este el operador ternario?
var x= expression ? true:false
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. –
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! = 00
si Max == 0Esto 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.
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;
}
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"
"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
parece estar evitando el establecimiento de saturación a 'Infinity' (causada por la división por cero). –