Le point d'interrogation et du côlon en JavaScript
Je suis tombé sur la ligne suivante
hsb.s = max != 0 ? 255 * delta / max : 0;
Que faire de la ?
et :
signifie dans ce contexte?
- Semble être en évitant de réglage de la saturation pour
Infinity
(causée par une division par zéro).
Vous devez vous connecter pour publier un commentaire.
Il est appelé le Opérateur Conditionnel (qui est un opérateur ternaire).
Il a la forme d':
condition
?value-if-true
:value-if-false
Pensez à la
?
comme "alors" et:
comme "autre".Votre code est équivalent à
addition
est un opérateur binaire qui fonctionne sur le précédant et suivant les expressions (par exemple, 1+2 le plus fonctionne sur 1 et 2), ou de la négation est un opérateur unaire (par exemple,- x, où la valeur de x est niée).Correctement mis entre parenthèses pour plus de clarté, il est
sens retour soit
255*delta/max
si max != 00
si max == 0C'est probablement un peu plus clair lorsqu'il est écrit entre parenthèses, comme suit:
Ce qu'il fait est d'évaluer la partie dans la première crochets. Si le résultat est vrai, alors la partie après le ? et avant de le : est retourné. Si elle est fausse, alors ce qui suit l' : est retourné.
hsb.s = max != 0 ? 255 * delta /max : 0;
? est un opérateur ternaire, il fonctionne comme un si en conjonction avec l' :
!= signifie pas égale
Donc, le long de la forme de cette ligne serait
? :
n'est-ce pas l'opérateur ternaire?var x= expression ? true:false
?: un bref état de
else {}
etif(){}
problèmes.Si votre code est interchangeable à ceci:
MDN - Conditionnel (Ternaire) Opérateur
Être prudent avec ce. Un -1 évalue à vrai bien que -1 != vrai et -1 != faux. Faites-moi confiance, je l'ai vu arriver.
donc
-1 ? "vraie côté" : "false" côté
prend la valeur "vrai côté"