it-swarm.com.de

Fragezeichen und Doppelpunkt in JavaScript

Ich bin auf folgende Zeile gestoßen

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

Was bedeuten ? und : in diesem Zusammenhang?

218
Inaimathi

Es wird der Bedingte Operator (was ein ternärer Operator ist) genannt.

Es hat die Form von: condition? value-if-true: value-if-false
Stellen Sie sich den ? als "dann" und : als "sonst" vor.

Ihr Code entspricht

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

Richtig in Klammern gesetzt, ist es 

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

bedeutet entweder zurückkehren

  • 255*delta/max wenn max! = 0
  • 0 wenn max == 0
34
Jason S

Dies ist wahrscheinlich etwas klarer, wenn Sie mit Klammern wie folgt schreiben:

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

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

7
Nikolas Stephan

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

? ist ein ternärer Operator, er funktioniert wie ein if in Verbindung mit dem: 

! = bedeutet nicht gleich

Die lange Form dieser Zeile wäre also

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

? : ist das nicht der ternäre Operator?

var x= expression ? true:false

1
jldupont

?: ist eine kurze Handbedingung für else {}- und if(){}-Probleme . Ihr Code ist daher austauschbar:

if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

MDN - Bedingter (ternärer) Operator