Frage

Ich weiß, dass in JavaScript können Sie tun:

var oneOrTheOther = someOtherVar || "these are not the droids you are looking for...";

, wo der Variable oneOrTheOther auf dem Wert des ersten Ausdrucks nehmen, wenn es nicht null, undefined ist, oder false. In diesem Fall ist es wird auf den Wert der zweiten Anweisung zugeordnet.

Was aber der Variable oneOrTheOther zu zugewiesen bekommen, wenn wir den logischen UND-Operator?

var oneOrTheOther = someOtherVar && "some string";

Was würde passieren, wenn someOtherVar nicht falsch ist?
Was würde passieren, wenn someOtherVar falsch ist?

Just JavaScript lernen, und ich bin neugierig, was mit Zuordnung in Verbindung mit dem AND-Operator geschehen würde.

War es hilfreich?

Lösung

Grundsätzlich ist die logische UND-Operator (&&), wird der Wert des zweiten Operanden zurück, wenn die erste Seite ist truthy , und es wird der Wert des ersten Operanden zurück, wenn es von selbst < em> falsy , zum Beispiel:

true && "foo"; // "foo"
NaN && "anything"; // NaN
0 && "anything";   // 0

Beachten Sie, dass falsy Werte sind diejenigen, die coerce zu false wenn in Booleschen Kontext verwendet, sie sind null, undefined, 0, NaN, eine leere Zeichenfolge, und natürlich false, alles andere nötigt zu true .

Andere Tipps

ist && manchmal ein Wächter Operator.

genannt
variable = indicator && value

kann es verwendet werden, um den Wert zu setzen, nur wenn der Indikator truthy ist.

Douglas Crockford 1 :

Der && Operator erzeugt den Wert seines ersten Operanden, wenn der erste Operand falsy ist. Andernfalls wird der Wert des zweiten Operanden erzeugt.


1 Douglas Crockford: JavaScript: The Good Parts - Seite 16

Beginners Beispiel

Wenn Sie den Zugriff auf „user.name“ versuchen, aber dann geschieht dies:

Uncaught TypeError: Cannot read property 'name' of undefined 

Fürchte dich nicht. Sie können dies die && Operator in einer Zuweisung mit lösen oder oft die guard Operator , da sie "Wächter" aus dem undefinierten Fehler passiert genannt.

Hier sind einige Beispiele, die Sie ungerade finden können, aber lesen Sie weiter, wie es später erläutert wird.

var user = undefined;
var username = user && user.username;
// no error, "username" assigned value of "user" which is undefined

user = { username: 'Johnny' };
username = user && user.username;
// no error, "username" assigned 'Johnny'

user = { };
username = user && user.username;
// no error, "username" assigned value of "username" which is undefined

Erklärung : In der Wache Betrieb wird jeder Begriff ausgewertet wird links nach rechts eine nach der anderen . Wenn beurteilt ein Wert falsy ist, Auswertung beendet und dieser Wert wird dann zugewiesen. Wenn der letzte Punkt erreicht ist, wird es dann zugewiesen, ob es falsy ist.

falsy bedeutet, es ist einer dieser Werte undefined, false, 0, null, NaN, '' und truthy bedeutet nur, NICHT falsy.

Einfache Taste für Schutz Methode

Mit lodash schönen guard Bediener Zugriff verschachtelter Daten wie folgt:

// need to access obj.has.some.very.nested.stuff
var val = _.get(obj, 'has.some.very.nested.stuff');

, wie es behandelt die && Sachen unter der Haube, während schön zu Verwendung in einem geeigneten Verfahren zu sein. Lodash _.get Quellcode

Bonus: Der OR Operator

Die andere nützliche seltsame Zuordnung, die in der praktischen Anwendung ist der OR-Operator , die typischerweise für Plugins wie so verwendet wird:

this.myWidget = this.myWidget || (function() {
   // define widget
})();

, die nur den Codeabschnitt zuweist, wenn „this.myWidget“ falsy ist. Das ist praktisch, weil Sie Code an beliebiger Stelle und mehrfach nicht darum kümmern erklären kann, wenn sein oder nicht zuvor zugewiesen wurde, zu wissen, es wird nur einmal vergeben werden, da die Menschen ein Plugin verwenden könnte Ihr Skript-Tag src mehrere Male versehentlich erklären.

Erklärung : Jeder Wert wird ausgewertet von von links nach rechts, einen nach dem anderen . Wenn ein Wert truthy ist, stoppt Auswertung und Abtretungsempfänger dieser Wert, andernfalls läuft weiter, wenn der letzte Punkt erreicht ist, wird es zugeordnet unabhängig davon, ob es falsy ist oder nicht.

Extra Credit: Die Kombination von && und || in einer Zuordnung

Sie haben nun die ultimative Macht und kann tun, sehr seltsame Dinge wie diese sehr seltsam Beispiel in einem Palindrom verwendet wird.

function palindrome(s,i) {
 return (i >= s.length/2) || (s[i] === s[s.length -1 - i]) && palindrome(s, ++i);
}

In ausführliche Erläuterung hier: Palindrome in Javascript überprüfen

Happy-Codierung.

Nach Kommentieren ECMAScript 5.1 Abschnitt 11.11 :

Im Fall des logischen OR-Operator (||),

ausdr1 || expr2 Returns expr1, wenn es in true umgewandelt werden kann; andernfalls kehrt expr2. Wenn also mit Boolesche Werte verwendet, || true zurück, wenn einer der Operanden wahr ist; wenn beide falsch sind, kehrt false.

In dem gegebenen Beispiel

var oneOrTheOther = someOtherVar || „Das sind nicht die Droiden Sie suchen ... bewegen sich entlang“;

Das Ergebnis der Wert von someOtherVar wäre, wenn Boolean (someOtherVar) wahr . (Bitte beachten. Iness eines Ausdrucks ). Wenn es falsch ist, wäre das Ergebnis „das sind nicht die Droiden Sie suchen ... bewegen sich entlang“;

Und Im Fall des logischen AND-Operator (&&)

Returns expr1, wenn es auf false umgewandelt werden kann; andernfalls kehrt expr2. Wenn also mit Boolesche Werte verwendet, && gibt true zurück, wenn beide Operanden wahr sind; andernfalls wird false zurückgegeben.

In dem gegebenen Beispiel

Fall 1: Wenn Boolean (someOtherVar) falsch ist. Es gibt den Wert someOtherVar

Fall 2: wenn Boolean (someOtherVar) wahr. Es gibt „diese sind nicht die Droiden Sie suchen ... bewegen sich entlang“

Ich habe gesehen worden && überstrapaziert hier bei der Arbeit für die Zuweisungsanweisungen. Die Sorge ist zweifach: 1) Die ‚Anzeige‘ Check ist manchmal eine Funktion mit Overhead, dass die Entwickler berücksichtigen nicht. 2) Es ist leicht für Devs nur um es zu sehen, wie eine Sicherheitsprüfung und nicht betrachtet sie als falsch ihre var zuweisen. Ich mag sie eine typsichere Einstellung haben, so dass ich sie diese haben ändern:

var currentIndex = App.instance && App.instance.rightSideView.getFocusItemIndex();

folgt aus:

var currentIndex = App.instance && App.instance.rightSideView.getFocusItemIndex() || 0;

, so dass sie eine ganze Zahl erhalten, wie erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top