Me deparei com a seguinte linha
hsb.s = max != 0 ? 255 * delta / max : 0;
O que significam ?
e :
significam nesse contexto?
javascript
syntax
operators
conditional-operator
Inaimathi
fonte
fonte
Infinity
(causada pela divisão por zero).Respostas:
É 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
fonte
addition
um 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).Parênteses corretamente para maior clareza, é
significando retornar
255*delta/max
se max! = 00
se max == 0fonte
Provavelmente, isso é um pouco mais claro quando escrito entre colchetes, da seguinte maneira:
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.
fonte
?
é um operador ternário. Funciona como umif
em conjunto com o:
!=
significa não é igualPortanto, a forma longa dessa linha seria
fonte
? :
este não é o operador ternário?var x= expression ? true:false
fonte
?: É uma condição de curto mão para
else {}
eif(){}
problemas. Portanto, seu código é intercambiável com isso:MDN - Operador condicional (ternário)
fonte
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"
fonte