12 JavaScript-Tricks, die die meisten Tutorials übersehen
Als ich anfing, JavaScript zu lernen, war das erste, was ich tat, eine Liste mit Tricks zu erstellen, die mir halfen, Zeit zu sparen. Ich habe sie von anderen Programmierern, auf verschiedenen Websites und in Handbüchern entdeckt.
In diesem Artikel zeige ich Ihnen 12 großartige Möglichkeiten, Ihren JavaScript-Code zu verbessern und zu beschleunigen. In den meisten Fällen sind sie universell.
Erinnerung:für alle Leser von „Habr“ – ein Rabatt von 10 Rubel bei der Anmeldung zu einem beliebigen Skillbox-Kurs mit dem Aktionscode „Habr“.
Der Set-Objekttyp wurde in ES6 zusammen mit dem ..., Spread-Operator eingeführt. Wir können ihn verwenden, um ein neues Array zu erstellen, das nur eindeutige Werte enthält.
In einer normalen Situation ist viel mehr Code erforderlich, um denselben Vorgang auszuführen.
Diese Technik funktioniert für Arrays, die primitive Typen enthalten: undefiniert, null, boolesch, Zeichenfolge und Zahl. Wenn Sie mit einem Array arbeiten, das Objekte, Funktionen oder zusätzliche Arrays enthält, benötigen Sie einen anderen Ansatz.
Länge des Cache-Arrays in Zyklen
FAHRRÄDER
Wenn Sie for-Schleifen lernen, folgen Sie dem Standardverfahren:
for (let i = 0; i < array.length; i++){
console.log(i);
}
Bei dieser Syntax überprüft die for-Schleife jedoch bei jeder Iteration wiederholt die Länge des Arrays.
Manchmal kann dies nützlich sein, aber in den meisten Fällen ist es effizienter, die Länge des Arrays zwischenzuspeichern, was einen einmaligen Zugriff darauf erfordert. Wir können dies tun, indem wir eine Längenvariable definieren, in der wir die Variable i definieren, etwa so:
for (let i = 0, length = array.length; i < length; i++){
console.log(i);
}
Im Prinzip fast das Gleiche wie oben, aber durch die Vergrößerung der Schleifengröße erzielen wir eine erhebliche Zeitersparnis.
Kurzschlussfestigkeit (McCarthy-Bewertung)
BEDINGTE OPERATIONEN
Der ternäre Operator ist eine schnelle und effiziente Möglichkeit, einfache (und manchmal nicht so einfache) bedingte Anweisungen zu schreiben:
x> 100? „mehr als 100“: „weniger als 100“;
x> 100? (x>200? „mehr als 200“: „zwischen 100-200“): „weniger als 100“;
Aber manchmal ist sogar der ternäre Operator komplizierter als erforderlich. Wir können stattdessen 'and' && und 'or' verwenden || Boolesche Operatoren, um bestimmte Ausdrücke noch prägnanter auszuwerten. Es wird oft als „Kurzschluss“ oder „Kurzschlussfestigkeit“ bezeichnet.
Wie funktioniert das
Nehmen wir an, wir möchten nur eine von zwei oder mehr Bedingungen zurückgeben.
Die Verwendung von && gibt den ersten falschen Wert zurück. Wenn jeder Operand als wahr ausgewertet wird, wird der zuletzt ausgewertete Ausdruck zurückgegeben.
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
Verwenden von || gibt den ersten wahren Wert zurück. Wenn jeder Operand als falsch ausgewertet wird, wird der zuletzt ausgewertete Wert zurückgegeben.
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
Beispiel 1
Nehmen wir an, wir möchten die Länge einer Variablen zurückgeben, kennen aber ihren Typ nicht.
In diesem Fall können Sie if/else verwenden, um zu überprüfen, ob foo der richtige Typ ist, aber diese Methode ist möglicherweise zu lang. Daher ist es besser, unseren „Kurzschluss“ zu nehmen.
return (foo || []).length;
Wenn die Variable foo eine passende Länge hat, wird diese zurückgegeben. Sonst erhalten wir 0.
Beispiel 2
Hatten Sie Probleme beim Zugriff auf ein verschachteltes Objekt? Möglicherweise wissen Sie nicht, ob ein Objekt oder eine seiner Untereigenschaften existiert, was zu Problemen führen kann.
Wir wollten beispielsweise auf die Dateneigenschaft in this.state zugreifen, aber die Daten werden erst definiert, wenn unser Programm eine Abrufanforderung zurückgibt.
Je nachdem, wo wir es verwenden, kann der Aufruf von this.state.data den Start der Anwendung verhindern. Um das Problem zu lösen, könnten wir dies in einen bedingten Ausdruck verpacken:
Eine bessere Option wäre die Verwendung des „oder“-Operators.
return (this.state.data || 'Fetching Data');
Wir können den obigen Code nicht ändern, um && zu verwenden. Der Operator „Fetching Data“ && this.state.data gibt this.state.data zurück, unabhängig davon, ob es undefiniert ist oder nicht.
Optionale Kette
Man könnte die Verwendung einer optionalen Verkettung vorschlagen, wenn versucht wird, eine Eigenschaft tief in einer Baumstruktur zurückzugeben. Also, das Fragezeichen-Symbol? kann nur zum Abrufen einer Eigenschaft verwendet werden, wenn sie nicht null ist.
Beispielsweise könnten wir das obige Beispiel umgestalten, um this.state.data?..() zu erhalten. Das heißt, Daten werden nur zurückgegeben, wenn der Wert nicht null ist.
Wenn es darauf ankommt, ob der Status definiert ist oder nicht, könnten wir auch this.state?.data zurückgeben.
In Boolean konvertieren
TYPKONVERTIERUNG
Neben den normalen booleschen Funktionen wahr und falsch behandelt JavaScript auch alle anderen Werte als wahr oder falsch.
Sofern nicht anders angegeben, sind alle Werte in JavaScript wahr, außer 0, „“, null, undefiniert, NaN und natürlich falsch. Letztere sind falsch.
Wir können problemlos zwischen den beiden wechseln, indem wir den Operator ! verwenden, der auch den Typ in einen booleschen Wert umwandelt.
Es kann Situationen geben, in denen + als Verkettungsoperator und nicht als Additionsoperator interpretiert wird. Um dies zu vermeiden, sollten Sie Tilden verwenden: ~~. Dieser Operator entspricht -n-1. Beispielsweise ist ~15 gleich -16.
Die Verwendung von zwei Tilden hintereinander negiert die Operation, da - (- - n - 1) - 1 = n + 1 - 1 = n. Mit anderen Worten: ~-16 entspricht 15.
Ab ES7 können Sie den Potenzierungsoperator ** als Abkürzung für Potenzen verwenden. Dies ist viel schneller als die Verwendung von Math.pow(2, 3). Es scheint einfach, aber dieser Punkt ist in der Liste der Techniken enthalten, da er nicht überall erwähnt wird.
console.log(2 ** 3); // Result: 8
Es sollte nicht mit dem ^-Symbol verwechselt werden, das üblicherweise zur Potenzierung verwendet wird. Aber in JavaScript ist dies der XOR-Operator.
Vor ES7 konnte die **-Verknüpfung nur für Potenzen der Basis 2 unter Verwendung des bitweisen Linksverschiebungsoperators << verwendet werden:
Wenn Sie eine Gleitkommazahl in eine Ganzzahl umwandeln müssen, können Sie Math.floor(), Math.ceil() oder Math.round() verwenden. Aber es gibt einen schnelleren Weg, dafür verwenden wir |, also den OR-Operator.
Verhalten | hängt weitgehend davon ab, ob Sie es mit positiven oder negativen Zahlen zu tun haben. Daher ist diese Methode nur geeignet, wenn Sie sich in dem, was Sie tun, sicher sind.
n | 0 entfernt alles nach dem Dezimaltrennzeichen und kürzt den Gleitkommawert auf eine Ganzzahl.
Den gleichen Rundungseffekt können Sie mit ~~ erzielen. Nach der erzwungenen Konvertierung in eine Ganzzahl bleibt der Wert unverändert.
Nachgestellte Zahlen entfernen
Mit dem OR-Operator können beliebig viele Ziffern aus einer Zahl entfernt werden. Das bedeutet, dass wir keine Typen wie hier konvertieren müssen:
let str = "1553";
Number(str.substring(0, str.length - 1));
ES6-Pfeilnotationen können in Klassenmethoden verwendet werden, und die Bindung ist impliziert. Das bedeutet, dass Sie sich von sich wiederholenden Ausdrücken wie this.myMethod = this.myMethod.bind(this) verabschieden können!
Möglicherweise haben Sie JSON.stringify bereits verwendet. Wussten Sie, dass es bei der Formatierung Ihres JSON hilft?
Die stringify()-Methode benötigt zwei optionale Parameter: eine Ersetzungsfunktion, mit der das angezeigte JSON gefiltert werden kann, und einen Leerzeichenwert.
console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, 't'));
// Result:
// '{
// "alpha": A,
// "beta": B
// }'
Das ist alles, ich hoffe, dass alle diese Techniken nützlich waren. Welche Tricks kennen Sie? Schreib sie in die Kommentare.