Signo de interrogación y dos puntos en JavaScript


Respuestas:


363

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

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

Tu código es equivalente a

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

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

11
Ok, ok ... ahora estoy usando un pronombre ambiguo, ¿feliz? :)
Greg

14
Para ser pedante, es un operador ternario, que resulta ser el único en la mayoría de los lenguajes de programación. Cualquier operador que trabaja en 3 partes es un operador ternario, al igual additionque un operador binario que opera en las expresiones anteriores y siguientes (por ejemplo, 1 + 2, el más opera en 1 y 2), o la negación es un operador unario (por ejemplo, -x donde se niega el valor de x).
Davy8

66
@ Davy8: Y este se puede llamar operador condicional para ser específico.
Caracol mecánico

¿Qué pasa si desea verificar dos condiciones?
Thanos Dodd

38

Bien entre paréntesis para mayor claridad, es

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

significado retorno tampoco

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

7

Esto es probablemente un poco más claro cuando se escribe entre paréntesis 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 de? y antes de que se devuelva: Si es falso, se devuelve lo que sigue a:


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

?Es un operador ternario. Funciona como un ifen conjunto 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;
}

1

? : ¿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 declaración, para aquellos casos en los que solo desea VERDADERO / FALSO: ¡Si 'expresión' era solo una variable con un número o cadena, "var x = !! expresión "lo convertirá en un resultado booleano.
Scott Lahteine


-3

Ten cuidado con esto. A -1 se evalúa como verdadero aunque -1! = Verdadero y -1! = Falso. Confía en mí, lo he visto suceder.

entonces

-1? "lado verdadero": "lado falso"

se evalúa como "lado verdadero"


3
"En JavaScript, un valor verdadero es un valor que se considera verdadero cuando se evalúa en un contexto booleano. Todos los valores son verdaderos a menos que se definan como falsos (es decir, excepto falso, 0", "nulo, indefinido y NaN) ". Es por eso que -1 se evalúa como verdadero. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
jobmo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.