Verwendung von ES6-Vorlagenliteralen in JavaScript
In der Programmierung bezieht sich der Begriff "Literal" auf die Notation von Werten im Code. Zum Beispiel notieren wir einen Zeichenfolgenwert mit einem Zeichenfolgenliteral, bei dem es sich um Zeichen handelt, die in doppelte oder einfache Anführungszeichen eingeschlossen sind ( "foo"
, 'bar'
, "This is a string!"
).
Vorlagenliterale wurden in ECMAScript 6 eingeführt . Sie arbeiten ziemlich ähnlich wie String-Literale; Sie erzeugen Vorlagenwerte und Rohvorlagenwerte, die beide Zeichenfolgen sind.
Im Gegensatz zu Zeichenfolgenliteralen können Vorlagenliterale Werte mit mehrzeiligen Zeichenfolgen erzeugen, die Sie in einem Zeichenfolgenliteral nur durch Hinzufügen neuer Zeilenzeichen ( \n
) erreichen können.
Vorlagenliterale können auch Zeichenfolgen mit anderen Werten (abgeleitet von Ausdrücken) erstellen, für die Sie den Plus-Operator in einem Zeichenfolgenliteral verwenden müssten ( "your id is:" + idNo
; wobei idNo
ein Variablenausdruck mit einem numerischen Wert ist).
All diese Funktionen machen Vorlagenliterale zum Erstellen von Zeichenfolgenwerten besser geeignet.
Syntax von Vorlagenliteralen
Das Trennzeichen eines Vorlagenliterals ist das Backtick-Zeichen (auch bekannt als Backquote-Zeichen oder Grab-Akzent-Symbol). Ein Ausdruck innerhalb des Literals (dessen Wert während der Laufzeit ausgewertet wird und in dem vom Literal erzeugten Endwert enthalten ist) ist in geschweifte Klammern {}
mit einem vorangestellten Dollarzeichen $
.
`string $ {someExpression} more string`
Im Folgenden finden Sie einige Beispiele für Vorlagenliterale, die unverändert, ersetzt (Ausdrücke, die durch ihre ausgewerteten Werte ersetzt werden) und Zeichenfolgen mit mehreren Zeilen enthalten .
console.log (`Hallo`); // Hallo var name = "Joan"; console.log (`Hallo $ {Name}`); // Hallo Joan console.log (`Liebe Joan, Willkommen.`); // Liebe Joan, // Willkommen.
Escaping & rohe Vorlagenwerte
In einem Vorlagenliteral sollten die Zeichen `
(Backtick), \
(Backslash) und $
(Dollarzeichen) mit dem Escapezeichen \
maskiert werden, wenn sie in ihren Vorlagenwert eingeschlossen werden sollen.
Standardmäßig werden alle Escape-Sequenzen in einem Vorlagenliteral ignoriert . Wenn Sie es in die Ausgabe einbeziehen möchten, müssen Sie dessen Rohvorlagenwert verwenden .
console.log (`Inline-Code in Markup: \` code \ ``); // Inline-Code in Markup: `code` var name =" Joan "; console.log (`Hallo \ $ {Name} .`); // Hallo $ {Name}. console.log (String.raw`hello \ $ {name} .`); // Hallo \ $ {Name}.
Die String.raw
Methode gibt rohe Vorlagenwerte aus (die rohe Zeichenfolge eines Vorlagenliterals). Im obigen Code wird der Funktionsaufruf der raw
als "getaggte Vorlage" bezeichnet .
Markierte Vorlagen
Eine getaggte Vorlage ist ein Funktionsaufruf, bei dem anstelle der üblichen Klammern (mit optionalen Parametern) neben dem Funktionsnamen ein Vorlagenliteral vorhanden ist, von dem die Funktion ihre Argumente erhält.
Also, anstatt eine Funktion wie folgt aufzurufen:
foo (ArgumenteFürFoo);
Es heißt so:
foo`ATemplateStringProvidingArgumentsForFoo`;
Die Funktion foo
wird als Tag-Funktion bezeichnet . Das erste Argument, das vom Vorlagenliteral erhalten wird, ist ein Array, das Vorlagenobjekt genannt wird .
Das Vorlagenobjekt (ein Array) enthält alle Zeichenfolgenwerte, die aus dem Vorlagenliteral interpretiert werden, und verfügt über eine raw
Eigenschaft (ein anderes Array), die alle aus demselben Literal interpretierten Raw-Zeichenfolgen enthält .
Nach dem Vorlagenobjekt enthalten die Argumente der Tag-Funktion alle ausgewerteten externen Werte, die in diesem Literal vorhanden sind (die in den geschweiften Klammern ${}
).
Im folgenden Code wird die foo
Funktion erstellt, um ihre Argumente auszugeben . Die Funktion wird dann in der getaggten Vorlagenart aufgerufen, wobei ein Vorlagenliteral zwei Ausdrücke ( name
und id
) enthält.
var name = "John"; var id = 478; foo`hello $ {name}. Ihre ID ist: $ {id} .`; Funktion foo () {console.log (Argumente [0]); // Array ["Hallo", ". Ihre ID ist:", "." ] console.log (Argumente [1]); // John console.log (Argumente [2]); // 478}
Das erste ausgegebene Argument ist das Vorlagenobjekt, das alle aus dem Vorlagenliteral interpretierten Zeichenfolgen enthält, das zweite und dritte Argument sind die ausgewerteten Werte der Ausdrücke, des name
und der id
.
Das raw
Eigentum
Wie bereits erwähnt, hat das Template-Objekt eine Eigenschaft namens raw
die ein Array ist, das alle rohen (nicht-maskierten) String-Werte enthält, die aus dem Template-Literal interpretiert werden. So können Sie auf die raw
Eigenschaft zugreifen:
var name1 = "John", name2 = "Joan"; foo`hello \ $ {name1}, $ {name2}, wie geht es dir beiden? `; Funktion foo () {console.log (Argumente [0]); // Array ["Hallo $ {Name1}, ", ", wie geht es dir beiden?"] Console.log (Argumente [0] .raw); // Array ["Hallo \ $ {Name1}, ", ", wie geht es dir beiden?"] Console.log (Argumente [1]); // Joan}
Verwenden Sie Fälle von markierten Vorlagen
Mit Tags versehene Vorlagen sind nützlich, wenn Sie eine Zeichenfolge in separate Teile aufteilen müssen, wie es oft in einer URL der Fall ist, oder beim Parsen einer Sprache. Hier finden Sie eine Sammlung von getaggten Vorlagenbeispielen .
Anders als IE werden Vorlagenliterale in allen gängigen Browsern unterstützt .
Im Folgenden finden Sie einige Beispiele für Tag-Funktionen mit verschiedenen Signaturen, die die Argumente darstellen:
var name = "John"; foo`hello $ {name}, wie geht es euch beiden? `; bar`hello $ {name}, wie geht es euch beiden? `; Funktion foo (... args) {console.log (args); // Array [Array ["Hallo", ", wie geht es dir beiden?"], "John"]} Funktionsleiste (strVals, ... exprVals) {console.log (strVals); // Array ["Hallo", "wie geht es euch beiden?" ] console.log (exprVals); // Array ["John"]}
In der strVals
ist der erste Parameter ( strVals
) das Vorlagenobjekt und der zweite Parameter (der die strVals
verwendet) ist ein Array, das alle ausgewerteten Ausdruckwerte aus dem Vorlagenliteral gesammelt hat, das an die Funktion übergeben wurde.
Setze die Schnur zusammen
Wenn Sie den gesamten Satz (abgeleitet aus dem Literal) innerhalb der Tag-Funktion erhalten möchten, verketten Sie alle Werte der Arrays, die die Template-Strings und die ausgewerteten Ausdrücke enthalten. So was:
Funktion foo (strs, ... excrs) {// Wenn im Literal Ausdrücke enthalten sind if (excrs.length! == 0) {var n = strs.length - 1, result = ''; für (var i = 0; i <n; i ++) {Ergebnis + = strs [i] + Ausdruck [i]; } Ergebnis + = strs [n]; console.log (Ergebnis); //"Hallo John." } // wenn im Literal keine Ausdrücke enthalten sind else console.log (strs [0]); } Name = 'John'; foo`Hello $ {name} .`;
Das strs
Array enthält alle Strings, die im Literal gefunden werden, und exprs
enthält alle ausgewerteten Expressions-Werte aus dem Literal.
Wenn nur ein Ausdruckswert vorhanden ist, verketten Sie jeden Array-Wert von strs
(außer dem letzten) mit dem gleichen Indexwert von exprs
. strs
dann am Ende den letzten Wert des strs
Arrays zur verketteten Zeichenfolge hinzu, um auf diese Weise einen vollständigen Satz zu bilden .
6 Dinge, die wir gerne machen, wenn Social Media nicht läuft
Für viele Menschen sind Social Media stark in ihren Tagesablauf integriert. Es scheint unmöglich, einen Tag ohne Überprüfung unserer Social-Media-Konten zu gehen, und obwohl wir dies nicht freiwillig tun würden, gibt es Zeiten, in denen die Social-Network-Seite einige Ausfallzeiten erleben kann.&quo
20 animierte und interaktive Infografiken, die Sie sehen müssen
Jeder liebt Infografiken, sicher, aber statische Infografiken sind jetzt ein bisschen alter Hut. Bei so vielen Infografiken ist es einfach, viele Infografiken mit guten Inhalten zu übersehen, nur weil sie sich nicht vom Rest der Packung abheben. Und wenn Sie ein Designer sind, haben Sie sich wahrscheinlich den Kopf zerbrochen, um herauszufinden, wie Sie Zuschauer anziehen und Infografiken erstellen können, die sich von anderen abheben.N