Fragezeichen und Doppelpunkt in JavaScript


Antworten:


363

Es wird als bedingter Operator (der ein ternärer Operator ist ) bezeichnet.

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

Ihr Code entspricht

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

27
"?" ist nicht der ternäre Operator; "?:" ist der ternäre Operator. Sprechen über "?" als der ternäre Operator ist wie über Abbott ohne Costello, Laurel ohne Hardy, Cheech ohne Chong zu sprechen ....
Jason S

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

14
Um pedantisch zu sein, ist es ein ternärer Operator, der in den meisten Programmiersprachen der einzige ist. Jeder Operator, der mit 3 Teilen arbeitet, ist ein ternärer Operator, genau wie additionein binärer Operator, der mit den vorhergehenden und folgenden Ausdrücken arbeitet (z. B. 1 + 2, das Plus mit 1 und 2), oder die Negation ist ein unärer Operator (z. B. -x) wobei der Wert von x negiert wird).
Davy8

6
@ Davy8: Und dieser kann als Bedingungsoperator bezeichnet werden , um genau zu sein.
Mechanische Schnecke

Was ist, wenn Sie zwei Bedingungen überprüfen möchten?
Thanos Dodd

38

Aus Gründen der Klarheit richtig in Klammern gesetzt, ist es

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

was bedeutet, entweder zurück

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

7

Dies ist wahrscheinlich etwas klarer, wenn in Klammern wie folgt geschrieben wird:

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 der Teil nach dem? und bevor das: zurückgegeben wird. Wenn es falsch ist, wird das Folgende zurückgegeben :.


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

?ist ein ternärer Operator. Es funktioniert wie ein ifin Verbindung mit dem:

!= bedeutet nicht gleich

Die lange Form dieser Linie wäre also

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

1

? : 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 WAHR / FALSCH möchten: Wenn 'Ausdruck' nur eine Variable mit einer Zahl oder einem String darin war, ist "var x = !! Ausdruck "macht es zu einem booleschen Ergebnis.
Scott Lahteine


-3

Sei vorsichtig damit. A -1 ergibt true, obwohl -1! = True und -1! = False. Vertrau mir, ich habe es gesehen.

so

-1? "wahre Seite": "falsche Seite"

bewertet zu "wahrer Seite"


3
"In JavaScript ist ein Wahrheitswert ein Wert, der als wahr angesehen wird, wenn er in einem booleschen Kontext ausgewertet wird. Alle Werte sind wahr, es sei denn, sie sind als falsch definiert (dh mit Ausnahme von falsch, 0, null, undefiniert und NaN). . " Aus diesem Grund wird -1 als wahr bewertet. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
Jobmo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.