403 Stimmen

JavaScript OR (||) Erklärung der Variablenzuweisung

Mit diesem JavaScript-Schnipsel...

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f = a || b || c || d || e;

alert(f); // 4

Kann mir bitte jemand erklären, wie diese Technik genannt wird (meine beste Vermutung steht im Titel dieser Frage!)? Und wie/warum sie genau funktioniert?

Nach meinem Verständnis ist die Variable f wird der nächstgelegene Wert (von links nach rechts) der ersten Variablen zugewiesen, die einen Wert hat, der nicht entweder null oder undefiniert ist, aber ich habe es nicht geschafft, viel Referenzmaterial über diese Technik zu finden, und ich habe gesehen, dass sie oft verwendet wird.

Ist diese Technik auch spezifisch für JavaScript? Ich weiß, dass etwas Ähnliches in PHP zu folgenden Ergebnissen führen würde f einen wahren booleschen Wert hat, anstatt den Wert von d selbst.

10voto

WSimpson Punkte 420

Diese Frage ist bereits mehrfach gut beantwortet worden.

Zusammenfassend lässt sich sagen, dass diese Technik eine Eigenschaft der Kompilierung der Sprache ausnutzt. Das heißt, dass JavaScript die Auswertung boolescher Operatoren "kurzschließt" und den Wert zurückgibt, der entweder mit dem ersten nicht-falschen Variablenwert verbunden ist, oder den Wert, den die letzte Variable enthält. Siehe Anurags Erklärung zu den Werten, die als falsch ausgewertet werden.

Die Anwendung dieser Technik ist jedoch aus mehreren Gründen keine gute Praxis.

  1. Lesbarkeit des Codes: Hier werden boolesche Operatoren verwendet, und wenn das Verhalten bei der Kompilierung nicht verstanden wird, wäre das erwartete Ergebnis ein boolescher Wert.

  2. Stabilität: Hier wird ein Merkmal der Kompilierung der Sprache verwendet, das in mehreren Sprachen nicht einheitlich ist und daher in Zukunft möglicherweise geändert werden könnte.

  3. Dokumentierte Merkmale: Es gibt eine bestehende Alternative, die diese Anforderung erfüllt und in mehr Sprachen konsistent ist. Dies wäre der ternäre Operator:

    () ? Wert 1: Wert 2.

Die Verwendung des ternären Operators erfordert zwar etwas mehr Tipparbeit, aber es wird klar zwischen dem ausgewerteten booleschen Ausdruck und dem zugewiesenen Wert unterschieden. Darüber hinaus kann er verkettet werden, so dass die oben beschriebenen Arten von Standardzuweisungen neu erstellt werden können.

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f =  ( a ) ? a : 
                ( b ) ? b :
                       ( c ) ? c :
                              ( d ) ? d :
                                      e;

alert(f); // 4

8voto

Arshid KV Punkte 8889

Ausgang zurückgeben erster wahrer Wert .

Wenn alle falsch sind, wird der letzte falsche Wert zurückgegeben.

Beispiel:-

  null || undefined || false || 0 || 'apple'  // Return apple

5voto

Vijay Punkte 158

Es heißt Kurzschlussoperator.

Die Kurzschlussauswertung besagt, dass das zweite Argument nur dann ausgeführt oder ausgewertet wird, wenn das erste Argument nicht ausreicht, um den Wert des Ausdrucks zu bestimmen. Wenn das erste Argument der ODER-Funktion (||) als wahr ausgewertet wird, muss der Gesamtwert wahr sein.

Sie kann auch verwendet werden, um einen Standardwert für ein Funktionsargument festzulegen.

function theSameOldFoo(name){ 
  name = name || 'Bar' ;
  console.log("My best friend's name is " + name);
}
theSameOldFoo();  // My best friend's name is Bar
theSameOldFoo('Bhaskar');  // My best friend's name is Bhaskar`

4voto

Matthew Crumley Punkte 98564

Es setzt die neue Variable ( z ) entweder auf den Wert von x wenn es "wahrheitsgemäß" ist (nicht Null, ein gültiges Objekt/Array/Funktion/was auch immer) oder y sonst. Dies ist eine relativ gängige Methode, um einen Standardwert für den Fall bereitzustellen, dass x gibt es nicht.

Wenn Sie z. B. eine Funktion haben, die einen optionalen Callback-Parameter benötigt, können Sie einen Standard-Callback bereitstellen, der nichts tut:

function doSomething(data, callback) {
    callback = callback || function() {};
    // do stuff with data
    callback(); // callback will always exist
}

2voto

Andris Punkte 26949

Das heißt, wenn x gesetzt ist, wird der Wert für z wird sein x , sonst wenn y gesetzt ist, wird sein Wert als z Wert.

es ist dasselbe wie

if(x)
  z = x;
else
  z = y;

Das ist möglich, weil logische Operatoren in JavaScript keine booleschen Werte zurückgeben, sondern den Wert des letzten Elements, das für die Ausführung der Operation benötigt wird (bei einem ODER-Satz wäre dies der erste nicht-falsche Wert, bei einem UND-Satz der letzte). Wenn die Operation fehlschlägt, dann false zurückgegeben wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X