JavaScript – Das Handbuch für die Praxis. David Flanagan

JavaScript  –  Das Handbuch für die Praxis - David Flanagan


Скачать книгу
an der angegebenen Position.

      s.codePointAt(0) // => 72: ES6, funktioniert mit Codepoints > 16 Bit.

      // Funktionen zur Auffüllung von Strings in ES2017:

      "x".padStart(3) // => " x": String auf eine Länge von 3 durch links

      // hinzugefügte Leerzeichen erweitern.

      "x".padEnd(3) // => "x ": String auf eine Länge von 3 durch rechts

      // hinzugefügte Leerzeichen erweitern.

      "x".padStart(3, "*") // => "**x": String auf eine Länge von 3 durch links

      // hinzugefügte Sternchen erweitern.

      "x".padEnd(3, "-") // => "x--": String auf eine Länge von 3 durch rechts

      // hinzugefügte Bindestriche erweitern.

      // Funktionen zur Beschneidung von Leerzeichen. trim() ist ES5, andere Funktionen

      // sind ES2019:

      " test ".trim() // => "test": Leerzeichen am Anfang und am Ende entfernen.

      " test ".trimStart() // => "test ": Leerzeichen links entfernen. Auch trimLeft.

      " test ".trimEnd() // => "test": Leerzeichen rechts entfernen. Auch trimRight.

      // Verschiedene String-Methoden:

      s.concat("!") // => "Hello, world!": Oder benutzen Sie stattdessen

      // einfach den +-Operator.

      "<>".repeat(5) // => "<><><><><>": n Kopien verketten. ES6.

      Denken Sie daran, dass Strings in JavaScript unveränderbar sind. Methoden wie replace() und toUpperCase() liefern neue Strings – den String, auf dem sie aufgerufen werden, verändern sie nicht.

      Strings können auch wie schreibgeschützte Arrays behandelt werden, und Sie können auf einzelne Zeichen (16-Bit-Werte) eines Strings auch mit eckigen Klammern anstelle der charAt()-Methode zugreifen:

      let s = "hello, world";

      s[0] // => "h"

      s[s.length-1] // => "d"

       3.3.4Template-Literale

      In ES6 und höher können String-Literale durch Backticks eingefasst bzw. begrenzt werden:

      let s = `hello world`;

      Dies ist jedoch mehr als nur eine alternative Syntax für String-Literale, da diese Template-Literale beliebige JavaScript-Ausdrücke enthalten können. Der endgültige Wert eines String-Literals, das von Backticks begrenzt ist, wird berechnet, indem alle enthaltenen Ausdrücke ausgewertet, die Werte dieser Ausdrücke in Strings konvertiert und diese berechneten Strings mit den Literalzeichen innerhalb der Backticks kombiniert werden:

      let name = "Bill";

      let greeting = `Hello ${ name }.`; // greeting == "Hello Bill."

      Alles zwischen ${ und } wird als JavaScript-Ausdruck interpretiert. Alles außerhalb der geschweiften Klammern ist normaler String-Text. Der Ausdruck innerhalb der Klammern wird ausgewertet, in eine Zeichenfolge umgewandelt und in das Template eingefügt, wobei das Dollarzeichen, die geschweiften Klammern und alles dazwischen ersetzt werden.

      Ein Template-Literal kann eine beliebige Anzahl von Ausdrücken enthalten. Es dürfen alle Escape-Zeichen verwendet werden, die auch in normalen Zeichenfolgen erlaubt sind, und ein Template-Literal kann eine beliebige Anzahl von Zeilen umfassen, ohne dass dazu spezielle Escape-Zeichen erforderlich sind. Das folgende Template-Literal enthält vier JavaScript-Ausdrücke, eine Unicode-Escape-Sequenz und mindestens vier Zeilenumbrüche (die Ausdruckswerte können ebenfalls Zeilenumbrüche enthalten):

      let errorMessage = `\

      \u2718 Test failure at ${filename}:${linenumber}:

      ${exception.message}

      Stack trace:

      ${exception.stack}

      `;

      Der Backslash am Ende der ersten Zeile maskiert hier den ersten Zeilenumbruch, sodass der resultierende String mit dem Unicode-Zeichen image (\u2718) anstelle eines Zeilenumbruchs beginnt.

       Getaggte Template-Literale

      Eine mächtige, aber seltener verwendete Eigenschaft von Template-Literalen besteht darin, dass der Text und die Werte der Ausdrücke innerhalb des Template-Literals an eine Funktion übergeben werden, sofern direkt vor dem öffnenden Backtick ein Funktionsname (bzw. ein Tag oder eine Tag-Funktion) steht. Der Wert eines solchen getaggten Template-Literals ist der Rückgabewert der Funktion. Auf diese Weise kann man zum Beispiel HTML- oder SQL-Escaping auf Werte anwenden, bevor sie in einen Text eingefügt werden.

      ES6 bringt von Haus aus eine eingebaute Tag-Funktion mit: String.raw(). Sie gibt den von Backticks eingeschlossenen Text zurück, ohne dass Backslash-Maskierungen verarbeitet werden:

      `\n`.length // => 1: Der String enthält ein einzelnes Newline-Zeichen.

      String.raw`\n`.length // => 2: Ein Backslash und der Buchstabe n.

      Obwohl das Tag eines getaggten Template-Literals eine Funktion ist, werden bei ihrem Aufruf keine Klammern verwendet. In diesem sehr speziellen Fall ersetzen die Backticks die öffnende und die schließende Klammer.

      Die Möglichkeit, eigene Funktionen für den Einsatz als Tag in Template-Literalen zu definieren, ist ein mächtiges Feature von JavaScript. Diese Funktionen müssen keine Strings zurückgeben und können – als würde man eine zusätzliche Literalsyntax definieren – wie Konstruktoren verwendet werden. Sie werden in 14.5 ein Beispiel kennenlernen.

       3.3.5Mustervergleiche

      JavaScript definiert einen Datentyp RegExp, der als regulärer Ausdruck (kurz Regex von Regular Expression) bezeichnet wird und dazu dient, Muster in Textzeichenketten zu beschreiben und zu vergleichen. Der RegExp-Typ gehört nicht zu den grundlegenden Datentypen in JavaScript, aber er weist eine Literalsyntax auf, die der von Zahlen und Strings gleicht, sodass er manchmal wie ein grundlegender Datentyp wirkt. Die Grammatik von Regex-Literalen ist komplex, und die von ihnen definierte API ist nicht trivial. Der Datentyp wird in 11.3 ausführlich beschrieben. Weil Regexes äußerst mächtig sind und häufig bei der Arbeit mit Strings eingesetzt werden, bietet dieser Abschnitt schon einmal einen kurzen Überblick.

      Text, der zwischen einem Paar von Schrägstrichen steht, bildet ein Regex-Literal. Nach dem zweiten Schrägstrich kann eine Gruppe von Buchstaben folgen, die die Bedeutung des Musters abwandeln, zum Beispiel:

      /^HTML/; // Findet die Buchstaben H T M L am Anfang des Strings.

      /[1-9][0-9]*/; // Findet eine Ziffer ungleich null, auf die eine beliebige

      // Anzahl weiterer Ziffern folgt.

      /\bjavascript\b/i; // Findet das Wort "javascript" ohne Berücksichtigung der

      // Groß-/Kleinschreibung.

      Für die Arbeit mit regulären Ausdrücken enthält die JavaScript-Standardbibliothek die Klasse RegExp. RegExp-Objekte definieren einige nützliche Methoden, und auch Strings besitzen Methoden, die reguläre Ausdrücke als Argumente akzeptieren, beispielsweise:

      let text = "testing: 1, 2, 3"; // Beispieltext.

      let


Скачать книгу