2009-11-20 20 views
189

stieß ich auf die folgende ZeileFragezeichen in JavaScript

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

Was die ? und : in diesem Zusammenhang?

+0

Sieht Einstellung Sättigung zu vermeiden, um 'Infinity' (verursacht durch Division durch Null). –

Antwort

287

Es heißt Conditional Operator (das ist ein ternary operator).

Es hat die Form von: condition? value-if-true: value-if-false
Denken Sie an die ? als "dann" und : als "sonst".

Ihr Code entspricht

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

"?" ist nicht der ternäre Operator; "?:" ist der ternäre Operator. Sprechen über "?"Wie der ternäre Operator ist wie über Abbott ohne Costello, Laurel ohne Hardy, Cheech ohne Chong zu reden .... –

+10

Ok, ok ... jetzt benutze ich ein mehrdeutiges Pronomen, glücklich? :) – Greg

+5

sicher. ein gutes ternäres Operator verdient einen anderen .... –

0

? : ist das nicht der ternäre Operator?

var x= expression ? true:false

+3

Das ist ein Beispiel für seine Verwendung, aber es gibt tatsächlich eine kürzere Version Ihrer Anweisung für die Fälle, in denen Sie nur TRUE/FALSE wollen: Wenn 'expression' nur eine Variable mit einer Zahl oder einem String ist, "var x =! ! expression "wird es zu einem booleschen Ergebnis machen. –

29

Richtig für Klarheit klammerten, es ist

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

bedeutet Rückkehr entweder

  • 255*delta/max wenn max! = 0
  • 0 wenn max == 0
Diese
5

ist wahrscheinlich ein wenig klarer, wenn sie mit Klammern wie folgt geschrieben:

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

Was sie tut, ist das Teil in den ersten Klammern zu bewerten. Wenn das Ergebnis wahr ist, dann wird der Teil nach dem? und bevor das: zurückgegeben wird. Wenn es falsch ist, wird Folgendes zurückgegeben:

7

hsb.s = max! = 0? 255 * Delta/Max: 0;

? ein ternärer Operator ist, funktioniert es wie eine, wenn in Verbindung mit dem:

= bedeutet nicht gleich

würde Also, die lange Form dieser Linie

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

mit diesem vorsichtig. A -1 wird als wahr ausgewertet, obwohl -1! = Wahr und -1! = Falsch. Vertrau mir, ich habe es erlebt.

also

-1? "True side": "false side"

wertet auf "true side"

+1

"In JavaScript ist ein ** truthy ** -Wert ein Wert, der berücksichtigt wird wahr wenn in einem Booleschen Kontext ausgewertet. Alle Werte sind truthy, es sei denn, sie sind als Falsy definiert (dh außer für false, 0, "", null, undefined und NaN). "Deshalb wird -1 als wahr bewertet. (Https: //developer.mozilla. org/de-DE/docs/Glossar/Truthy) – jobmo