451 Stimmen

Verwendung des Backtick-Zeichens (`) in JavaScript

In JavaScript funktioniert ein Backtick† anscheinend genauso wie ein einfaches Anführungszeichen. Zum Beispiel kann ich ein Backtick verwenden, um einen String wie diesen zu definieren:

var s = `abc`;

Gibt es eine Möglichkeit, in der sich das Verhalten des Backticks tatsächlich von dem eines einfachen Anführungszeichens unterscheidet?


† Beachten Sie, dass unter Programmierern "Backtick" eine Bezeichnung für das ist, was allgemeiner als Gravis bezeichnet wird. Programmierer verwenden manchmal auch die alternativen Bezeichnungen "Backquote" und "Backgrave". Außerdem sind auf Stack Overflow und anderswo andere gängige Schreibweisen für "Backtick" "back-tick" und "back tick".

462voto

try-catch-finally Punkte 7061

Dies ist eine Funktion namens Template-Literale.

In vorherigen Ausgaben der Spezifikation von ECMAScript 2015 wurden sie "Vorlagenzeichenfolgen" genannt.

Template-Literale werden von Firefox 34, Chrome 41 und Edge 12 und höher unterstützt, jedoch nicht von Internet Explorer.

Template-Literale können verwendet werden, um mehrzeilige Zeichenfolgen darzustellen und können zur Einfügung von Variablen "Interpolation" verwenden:

var a = 123, str = `---
   a ist: ${a}
---`;
console.log(str);

Ausgabe:

---
   a ist: 123
---

Was noch wichtiger ist, sie können nicht nur einen Variablennamen enthalten, sondern auch jeden JavaScript-Ausdruck:

var a = 3, b = 3.1415;

console.log(`PI ist ungefähr ${Math.max(a, b)}`);

277voto

Thalaivar Punkte 22174

ECMAScript 6 kommt mit einer neuen Art von Zeichenfolgenliteral, wobei der Backtick als Begrenzer verwendet wird. Diese Literale erlauben es grundlegende Zeichenfolgeninterpolationsausdrücke einzubetten, die dann automatisch analysiert und ausgewertet werden.

let person = {name: 'RajiniKanth', age: 68, greeting: 'Thalaivaaaa!' };

let usualHtmlStr = "My name is " + person.name + ",\n" +
  "I am " + person.age + " old\n" +
  "\"" + person.greeting + "\" is what I usually say";

let newHtmlStr =
 `My name is ${person.name},
  I am ${person.age} old

Wie Sie sehen können, haben wir die ` um eine Reihe von Zeichen verwendet, die als Zeichenfolgenliterale interpretiert werden, aber jede Ausdrucksform von ${..} wird inline automatisch analysiert und ausgewertet.

Ein wirklich schöner Vorteil von interpolierten Zeichenfolgenliteralen besteht darin, dass sie über mehrere Zeilen aufgespalten werden können:

var Actor = {"name": "RajiniKanth"};

var text =
`Now is the time for all good men like ${Actor.name}
to come to the aid of their
country!`;
console.log(text);
// Now is the time for all good men like RajiniKanth
// to come to the aid of their
// country!

Interpolierte Ausdrücke

Jeder gültige Ausdruck ist erlaubt, innerhalb von ${..} in einem interpolierten Zeichenfolgenliteral zu erscheinen, einschließlich Funktionsaufrufen, Inline-Funktionsausdruckaufrufen und sogar anderen interpolierten Zeichenfolgenliteralen!

function upper(s) {
  return s.toUpperCase();
}
var who = "Leser"
var text =
`Ein sehr ${upper("herzlich")} Willkommen
an euch alle ${upper(`${who}s`)}!`;
console.log(text);
// A very WARM welcome
// to all of you READERS!

Hier war das innere interpolierte Zeichenfolgenliteral `${who}s` für uns eine etwas angenehmere Bequemlichkeit, wenn wir die Variable who mit der Zeichenfolge "s" kombinieren, im Gegensatz zu who + "s". Beachten Sie auch, dass ein interpoliertes Zeichenfolgenliteral nur lexikalisch in dem Bereich eingestuft wird, in dem es erscheint, nicht dynamisch eingestuft in irgendeiner Weise:

(z. B. unten: eine name-Variable wird mit dem Wert interpoliert, der im Bereich gehalten wird, in dem das Vorlagenliteral definiert ist; eine andere Wertzuweisung im Bereich der Funktion foo hat keinen Effekt)

_function foo(str) { var name = "foo"; console.log(str); } function bar() { var name = "bar"; foo(Hallo von ${name}!); } var name = "global"; bar(); // "Hallo von bar!"

Die Verwendung des Vorlagenliteral für das HTML ist definitiv lesbarer und reduziert die Unannehmlichkeiten.

Der alte Weg:

'' +
  '' + content + '' +
  'Gehen wir'
'';

Mit ECMAScript 6:

`
  ${content}
  Lass uns gehen
`
  • Ihre Zeichenfolge kann über mehrere Zeilen gehen.
  • Sie müssen keine Anführungszeichenzeichen escapen.
  • Sie können Gruppierungen wie: '">'
  • Sie müssen nicht den Plusoperator verwenden.

Getaggte Vorlagenliterale

Wir können auch eine Vorlagezeichenfolge taggen, wenn eine Vorlagezeichenfolge getaggt wird, werden die Literale und Substitutionen an eine Funktion übergeben, die den resultierenden Wert zurückgibt.

function myTaggedLiteral(strings) {
  console.log(strings);
}

myTaggedLiteral`Test`; //["Test"]

function myTaggedLiteral(strings, value, value2) {
  console.log(strings, value, value2);
}
let someText = 'Toll';
myTaggedLiteral`Test ${someText} ${2 + 3}`;
//["Test", ""]
// "Toll"
// 5

Wir können hier auch den Spread Operator verwenden, um mehrere Werte zu übergeben. Das erste Argument - wir nannten es strings - ist ein Array aller einfachen Zeichenfolgen (der Inhalt zwischen allen interpolierten Ausdrücken).

Dann sammeln wir alle nachfolgenden Argumente in einem Array namens Werte mit dem ... sammelnden / Rest-Operator, obwohl Sie sie natürlich als einzelne benannte Parameter nach den Zeichenfolgenparametern lassen könnten, wie wir es oben gemacht haben (Wert1, Wert2, usw.).

function myTaggedLiteral(strings, ...values) {
  console.log(strings);
  console.log(values);
}

let someText = 'Toll';
myTaggedLiteral`Test ${someText} ${2 + 3}`;
//["Test", ""]
// "Toll"
// 5

Die Argumente, die in unserem Werte-Array gesammelt werden, sind die Ergebnisse der bereits ausgewerteten Interpolationsausdrücke im Zeichenfolgenliteral. Ein getaggtes Zeichenfolgenliteral ist wie ein Verarbeitungsschritt nachdem die Interpolationen ausgewertet wurden, aber bevor der endgültige Zeichenfolgenwert kompiliert wird, was Ihnen mehr Kontrolle über die Generierung der Zeichenfolge aus dem Literal ermöglicht. Schauen wir uns ein Beispiel für die Erstellung von wiederverwendbaren Vorlagen an.

const Actor = {
  name: "RajiniKanth",
  store: "Landmark"
}

const ActorTemplate = templater`
  ${'name'} ist ein Schauspieler
  Sie können seine Filme bei ${'store'} finden.

`;

function templater(strings, ...keys) {
  return function(data) {
    let temp = strings.slice();
    keys.forEach((key, i) => {
      temp[i] = temp[i] + data[key];
    });
    return temp.join('');
  }
};

const myTemplate = ActorTemplate(Actor);
console.log(myTemplate);

Rohe Zeichenfolgen

Unsere Tag-Funktionen erhalten ein erstes Argument, das wir Zeichen nennen, das ein Array ist. Aber es gibt einen zusätzlichen Datenanteil: die rohen unverarbeiteten Versionen aller Zeichenfolgen. Sie können auf diese rohen Zeichenfolgenwerte über die Eigenschaft .raw zugreifen, wie folgt:

function showraw(strings, ...values) {
  console.log(strings);
  console.log(strings.raw);
}
showraw`Hallo\nWelt`;

Wie Sie sehen können, bewahrt die rohe Version der Zeichenfolge die escapte \n Sequenz, während die verarbeitete Version der Zeichenfolge es wie eine unmaskierte echte neue Zeile behandelt. ECMAScript 6 kommt mit einer integrierten Funktion, die als Zeichenfolgenliteraltag verwendet werden kann: String.raw(..). Sie leitet einfach die rohen Versionen der Zeichenfolgen weiter:

console.log(`Hallo\nWelt`);
/* "Hello
World" */

console.log(String.raw`Hallo\nWelt`);
// "Hallo\nWelt"_

33voto

Rohìt Jíndal Punkte 15250

Rückwärtsakzentzeichen (`) werden verwendet, um Vorlagenliterale zu definieren. Vorlagenliterale sind ein neues Feature in ECMAScript 6, um die Arbeit mit Strings zu erleichtern.

Funktionen:

  • Wir können jede Art von Ausdruck in den Vorlagenliteralen interpolieren.
  • Sie können mehrzeilig sein.

Hinweis: Wir können einfach einzelne Anführungszeichen (') und doppelte Anführungszeichen (") innerhalb der Rückwärtsakzentzeichen (`) verwenden.

Beispiel:

var nameStr = `Ich bin "Alpha" Beta`;

Um die Variablen oder Ausdrücke zu interpolieren, können wir die Notation ${Ausdruck} verwenden.

var name = 'Alpha Beta';
var text = `Mein Name ist ${name}`;
console.log(text); // Mein Name ist Alpha Beta

Mehrzeilige Strings bedeuten, dass Sie nicht mehr \n für Zeilenumbrüche verwenden müssen.

Beispiel:

const name = 'Alpha';
console.log(`Hallo ${name}!
Wie geht es dir?`);

Ausgabe:

Hallo Alpha!
Wie geht es dir?

21voto

Ankit Kumar Punkte 1581

Abgesehen von der Zeichenketteninterpolation können Sie auch eine Funktion mithilfe eines Backticks aufrufen.

var sayHello = function () {
    console.log('Hallo', arguments);
}

// Um diese Funktion mit `` aufzurufen

sayHello`einige Argumente`; // Überprüfen Sie die Konsole auf die Ausgabe

// Oder
sayHello`
    einige Argumente
`;

Überprüfen Sie das styled component. Sie verwenden es intensiv.

17voto

mrmaclean89 Punkte 540

Rückwärtsstriche umschließen Schablonenliterale, früher bekannt als Schablonenzeichenfolgen. Schablonenliterale sind Zeichenfolgenliterale, die eingebettete Ausdrücke und String-Interpolationsfunktionen erlauben.

Schablonenliterale enthalten Ausdrücke in Platzhaltern, die durch das Dollarzeichen und geschweifte Klammern um einen Ausdruck gekennzeichnet sind, d.h. ${expression}. Der Platzhalter / Ausdruck wird an eine Funktion übergeben. Die Standardfunktion fügt einfach die Zeichenfolge zusammen.

Um ein Rückwärtszeichen zu escapen, setzen Sie einfach einen Backslash davor:

`\`` === '`'; => true

Verwenden Sie Rückwärtsstriche, um mehrzeilige Zeichenfolgen einfacher zu schreiben:

console.log(`Zeilennummer 1-Text
Zeilennummer 2-Text`);

oder

console.log(`Fünfzehn ist ${a + b} und
nicht ${2 * a + b}.`);

gegenüber dem ursprünglichen JavaScript:

console.log('Zeilennummer 1-Text\n' +
'Zeilennummer 2-Text');

oder

console.log('Fünfzehn ist ' + (a + b) + ' und\nnicht ' + (2 * a + b) + '.');

Escape-Sequenzen:

  • Unicode-Escapes, die mit \u beginnen, wie z.B. \u00A9
  • Unicode-Codepunkt-Escapes, die durch \u{} angezeigt werden, wie z.B. \u{2F804}
  • Hexadezimale Escapes, die mit \x beginnen, wie z.B. \xA9
  • Oktales literales Escapes, die mit \ und (einer) Ziffer(n) beginnen, wie z.B. \251

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