6. Neue String-Features
Inhaltsverzeichnis
Bitte unterstützen Sie dieses Buch: kaufen Sie es (PDF, EPUB, MOBI) oder spenden Sie
(Werbung, bitte nicht blockieren.)

6. Neue String-Features



6.1 Übersicht

Neue String-Methoden

> 'hello'.startsWith('hell')
true
> 'hello'.endsWith('ello')
true
> 'hello'.includes('ell')
true
> 'doo '.repeat(3)
'doo doo doo '

ES6 hat eine neue Art von String-Literal, das Template-Literal

// String interpolation via template literals (in backticks)
const first = 'Jane';
const last = 'Doe';
console.log(`Hello ${first} ${last}!`);
    // Hello Jane Doe!

// Template literals also let you create strings with multiple lines
const multiLine = `
This is
a string
with multiple
lines`;

6.2 Unicode-Codepunkt-Escapes

In ECMAScript 6 gibt es eine neue Art von Unicode-Escape, mit der Sie jeden Codepunkt angeben können (auch solche jenseits von 16 Bit)

console.log('\u{1F680}');    // ES6: single code point
console.log('\uD83D\uDE80'); // ES5: two code units

Weitere Informationen zu Escapes finden Sie im Kapitel über Unicode.

6.3 String-Interpolation, mehrzeilige String-Literale und Roh-String-Literale

Template-Literale werden ausführlich in einem eigenen Kapitel beschrieben. Sie bieten drei interessante Features.

Erstens unterstützen Template-Literale die String-Interpolation

const first = 'Jane';
const last = 'Doe';
console.log(`Hello ${first} ${last}!`);
    // Hello Jane Doe!

Zweitens können Template-Literale mehrere Zeilen enthalten

const multiLine = `
This is
a string
with multiple
lines`;

Drittens sind Template-Literale „roh“, wenn Sie ihnen das Tag String.raw voranstellen – der Backslash ist kein Sonderzeichen und Escapes wie \n werden nicht interpretiert

const str = String.raw`Not a newline: \n`;
console.log(str === 'Not a newline: \\n'); // true

6.4 Iterieren über Strings

Strings sind iterierbar, was bedeutet, dass Sie for-of verwenden können, um über ihre Zeichen zu iterieren

for (const ch of 'abc') {
    console.log(ch);
}
// Output:
// a
// b
// c

Und Sie können den Spread-Operator (...) verwenden, um Strings in Arrays umzuwandeln

const chars = [...'abc'];
    // ['a', 'b', 'c']

6.4.1 Iteration berücksichtigt Unicode-Codepunkte

Der String-Iterator teilt Strings entlang der Codepunktgrenzen auf, was bedeutet, dass die zurückgegebenen Strings ein oder zwei JavaScript-Zeichen umfassen

for (const ch of 'x\uD83D\uDE80y') {
    console.log(ch.length);
}
// Output:
// 1
// 2
// 1

6.4.2 Zählen von Codepunkten

Die Iteration bietet eine schnelle Möglichkeit, die Unicode-Codepunkte in einem String zu zählen

> [...'x\uD83D\uDE80y'].length
3

6.4.3 Umkehren von Strings mit Nicht-BMP-Codepunkten

Die Iteration hilft auch beim Umkehren von Strings, die Nicht-BMP-Codepunkte enthalten (die größer als 16 Bit sind und als zwei JavaScript-Zeichen kodiert werden)

const str = 'x\uD83D\uDE80y';

// ES5: \uD83D\uDE80 are (incorrectly) reversed
console.log(str.split('').reverse().join(''));
    // 'y\uDE80\uD83Dx'

// ES6: order of \uD83D\uDE80 is preserved
console.log([...str].reverse().join(''));
    // 'y\uD83D\uDE80x'
The two reversed strings in the Firefox console.
Die beiden umgekehrten Strings in der Firefox-Konsole.

6.5 Numerische Werte von Codepunkten

Die neue Methode codePointAt() gibt den numerischen Wert eines Codepunkts an einem bestimmten Index in einem String zurück

const str = 'x\uD83D\uDE80y';
console.log(str.codePointAt(0).toString(16)); // 78
console.log(str.codePointAt(1).toString(16)); // 1f680
console.log(str.codePointAt(3).toString(16)); // 79

Diese Methode funktioniert gut in Kombination mit der Iteration über Strings

for (const ch of 'x\uD83D\uDE80y') {
    console.log(ch.codePointAt(0).toString(16));
}
// Output:
// 78
// 1f680
// 79

Das Gegenteil von codePointAt() ist String.fromCodePoint()

> String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
true

6.6 Prüfen auf Inklusion

Drei neue Methoden prüfen, ob ein String in einem anderen String enthalten ist

> 'hello'.startsWith('hell')
true
> 'hello'.endsWith('ello')
true
> 'hello'.includes('ell')
true

Jede dieser Methoden hat eine Position als optionalen zweiten Parameter, der angibt, wo der zu durchsuchende String beginnt oder endet

> 'hello'.startsWith('ello', 1)
true
> 'hello'.endsWith('hell', 4)
true

> 'hello'.includes('ell', 1)
true
> 'hello'.includes('ell', 2)
false

6.7 Wiederholen von Strings

Die Methode repeat() wiederholt Strings

> 'doo '.repeat(3)
'doo doo doo '

6.8 String-Methoden, die reguläre Ausdrucksarbeiten an ihre Parameter delegieren

In ES6 leisten die vier String-Methoden, die Parameter für reguläre Ausdrücke akzeptieren, relativ wenig. Sie rufen hauptsächlich Methoden ihrer Parameter auf

Die Parameter müssen keine regulären Ausdrücke mehr sein. Beliebige Objekte mit entsprechenden Methoden sind ausreichend.

6.9 Referenz: die neuen String-Methoden

Getaggte Templates

Unicode und Codepunkte

Strings finden

Strings wiederholen

Weiter: 7. Symbole