Anfänger Beispiel
Wenn Sie versuchen, auf "user.name" zuzugreifen, geschieht dies jedoch:
Uncaught TypeError: Cannot read property 'name' of undefined
Keine Angst. Sie können dies mit dem Operator && in einer Zuweisung lösen oder häufig als Guard-Operator bezeichnen da er vor dem undefinierten Fehler "schützt".
Hier sind einige Beispiele, die Sie vielleicht seltsam finden, aber lesen Sie weiter, wie es später erklärt wird.
var user = undefined;
var username = user && user.username;
user = { username: 'Johnny' };
username = user && user.username;
user = { };
username = user && user.username;
Erläuterung : Bei der Schutzoperation wird jeder Begriff einzeln von links nach rechts ausgewertet . Wenn ein ausgewerteter Wert falsch ist, wird die Auswertung gestoppt und dieser Wert wird dann zugewiesen. Wenn das letzte Element erreicht ist, wird ihm zugewiesen, ob es falsch ist oder nicht.
Falschheit bedeutet, dass es sich um einen dieser Werte handelt, undefined, false, 0, null, NaN, ''
und Wahrhaftigkeit bedeutet einfach NICHT Falschheit.
Einfache Taste für die Schutzmethode
Verwenden Sie den schönen Guard-Operator von lodash, um auf verschachtelte Daten wie folgt zuzugreifen:
var val = _.get(obj, 'has.some.very.nested.stuff');
wie es das && Zeug unter der Haube behandelt, während es in einer bequemen Methode nett zu verwenden ist. Lodash _.get Quellcode
Bonus: Der OP-Operator
Die andere nützliche seltsame Aufgabe, die in der Praxis verwendet wird, ist die OR-Operator, der normalerweise für Plugins wie folgt verwendet wird:
this.myWidget = this.myWidget || (function() {
})();
Dadurch wird der Codeteil nur zugewiesen, wenn "this.myWidget" falsch ist. Dies ist praktisch, da Sie Code überall und mehrmals deklarieren können, ohne sich darum zu kümmern, ob er zugewiesen wurde oder nicht, da Sie wissen, dass er nur einmal zugewiesen wird, da Benutzer eines Plugins Ihr Skript-Tag src möglicherweise versehentlich mehrmals deklarieren.
Erläuterung : Jeder Wert wird einzeln von links nach rechts ausgewertet . Wenn ein Wert wahr ist, stoppt er die Auswertung und weist diesen Wert zu. Andernfalls wird er fortgesetzt. Wenn das letzte Element erreicht ist, wird er zugewiesen, unabhängig davon, ob er falsch ist oder nicht.
Extra Credit: Kombinieren von && und || in einer Aufgabe
Sie haben jetzt die ultimative Kraft und können sehr seltsame Dinge tun, wie dieses sehr seltsame Beispiel für die Verwendung in einem Palindrom.
function palindrome(s,i) {
return (i >= s.length/2) || (s[i] === s[s.length -1 - i]) && palindrome(s, ++i);
}
Ausführliche Erklärung hier: Palindrom-Check in Javascript
Viel Spaß beim Codieren.