Ponto de interrogação e dois pontos em JavaScript


Respostas:


363

É chamado de Operador Condicional (que é um operador ternário ).

Tem a forma de condition:? value-if-true: value-if-false
Pense no ?como "então" e :como "outro".

Seu código é equivalente a

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

27
"?" não é o operador ternário; "?:" é o operador ternário. Falando sobre "?" como o operador ternário é como falar de Abbott sem Costello, Laurel sem Hardy, Cheech sem Chong ....
Jason S

11
Ok, ok ... agora estou usando um pronome ambíguo, feliz? :)
Greg

14
Para ser pedante, é um operador ternário, que por acaso é o único na maioria das linguagens de programação. Qualquer operador que trabalhe em 3 partes é um operador ternário, assim como additionum operador binário que opera nas expressões anteriores e seguintes (por exemplo, 1 + 2, o plus opera em 1 e 2), ou a negação é um operador unário (por exemplo, -x onde o valor de x é negado).
precisa saber é o seguinte

6
@ Davy8: E este pode ser chamado de operador condicional para ser específico.
Caracol mecânico

E se você quisesse verificar duas condições?
Thanos Dodd

38

Parênteses corretamente para maior clareza, é

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

significando retornar

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

7

Provavelmente, isso é um pouco mais claro quando escrito entre colchetes, da seguinte maneira:

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

O que ele faz é avaliar a peça nos primeiros colchetes. Se o resultado for verdadeiro, a parte após o? e antes do: é retornado. Se for falso, o que se segue é retornado.


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

?é um operador ternário. Funciona como um ifem conjunto com o:

!= significa não é igual

Portanto, a forma longa dessa linha seria

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

1

? : este não é o operador ternário?

var x= expression ? true:false


3
Esse é um exemplo de uso, mas na verdade há uma versão mais curta da sua declaração, para os casos em que você deseja TRUE / FALSE: Se 'expression' fosse apenas uma variável com um número ou string, "var x = !! expressão "transformará em um resultado booleano.
Scott Lahteine ​​4/12/12


-3

Tenha cuidado com isso. Um -1 é avaliado como verdadeiro, embora -1! = Verdadeiro e -1! = Falso. Confie em mim, eu já vi isso acontecer.

tão

-1? "lado verdadeiro": "lado falso"

avalia como "lado verdadeiro"


3
"No JavaScript, um valor truthy é um valor considerado verdadeiro quando avaliado em um contexto booleano. Todos os valores são truthy, a menos que sejam definidos como falsy (ou seja, exceto false, 0," ", null, undefined e NaN) . " É por isso que -1 é avaliado como verdadeiro. ( developer.mozilla.org/pt-BR/docs/Glossary/Truthy )
jobmo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.