• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Anfängerfrage: Was bedeutet: step = step || 0;

Karli1969

New member
Soweit ich ergoogelt habe, ist der Doppelbalken ein logisches oder. Aber step soll in dem Programm eine Integervariable sein. Wie kann man eine Integer mit einer 0 logisch verodern und was kommt dabei raus?

Danke und viele Grüße
Karl
 
Der Ausdruck heißt - soweit ich weiß, ich verwende diesen Ausdruck niemals - 0 wenn nicht defined, also step = (defined step ? step : 0);
 
In JS sind logische Operationen nicht auf Booleans beschränkt, sondern können jeden beliebigen Wert zurückliefern.

Die Funktionsweise ist eigentlich relativ einfach: interpretiere die Werte in der logischen Operation als Boolean (also z.B. null, undefined, 0, NaN oder "" als false und alles andere true) und führe die Operation aus. Als Rückgabewert wird dann der Wert (und nicht die Booleaninterpretation davon) zurückgegeben, der die Operation entscheidet: (also bei && immer der Letzte und bei || der erste, wenn er true ist, und der zweite, wenn der erste false ist).
(http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf Kapitel 9.2 und 11.11)

PS: Da ist mir gerade ein schönes weiteres Beispiel aufgefallen, warum man die Konstruktoren der Primitiven (hier Number oder String) nicht verwenden sollte:
Code:
!!"" === !!(String("")) !== !!(new String("")); // false === false !== true
!!0 === !!(Number(0)) !== !!(new Number(0)); // false === false !== true
 
Vielen Dank für Eure Antworten, aber so richtig verstehe ich das immer noch nicht.
Step ist ja eine stinknormale ganze Zahl.

Oder kann es vielleicht so gemeint sein:
Wenn Step vorher noch nicht definiert war, dann wird es mit dieser Operation mit dem Wert 0 belegt. Ansonsten bleibt der Wert unverändert?

Das Codebeispiel in der zweiten Antwort ist ja sehr beeindrucken, aber bei meinem aktuellen Wissensstand sind as nur böhmische Dörfer. Habe auch noch nie drei Gleichheitszeichen hintereinander gesehen.
 
Oder kann es vielleicht so gemeint sein:
Wenn Step vorher noch nicht definiert war, dann wird es mit dieser Operation mit dem Wert 0 belegt. Ansonsten bleibt der Wert unverändert?
Genau so ist das wahrscheinlich gemeint. Für eine exakte Aussage bräuchten wir den Kontekt.

Das Codebeispiel in der zweiten Antwort ist ja sehr beeindrucken, aber bei meinem aktuellen Wissensstand sind as nur böhmische Dörfer.
Das musst du auch noch nicht verstehen. War mir nur aufgefallen und mehr als Hinweis für mich und alle, die ich mit den Primitivenkonstruktoren nerve, gemeint.

Habe auch noch nie drei Gleichheitszeichen hintereinander gesehen.
Der === Operator ist strikter als ==, da er keine automatischen Cast durchführt.
Code:
alert(1 == "1");
alert(1 === "1");
(http://www.ecma-international.org/pu...T/Ecma-262.pdf Kapitel 11.9.1 und 11.9.4)
 
Zurück
Oben