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`;
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.
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
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']
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
Die Iteration bietet eine schnelle Möglichkeit, die Unicode-Codepunkte in einem String zu zählen
> [...'x\uD83D\uDE80y'].length
3
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'
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
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
Die Methode repeat() wiederholt Strings
> 'doo '.repeat(3)
'doo doo doo '
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
String.prototype.match(regexp) ruft aufregexp[Symbol.match](this).String.prototype.replace(searchValue, replaceValue) ruft aufsearchValue[Symbol.replace](this, replaceValue).String.prototype.search(regexp) ruft aufregexp[Symbol.search](this).String.prototype.split(separator, limit) ruft aufseparator[Symbol.split](this, limit).Die Parameter müssen keine regulären Ausdrücke mehr sein. Beliebige Objekte mit entsprechenden Methoden sind ausreichend.
Getaggte Templates
String.raw(callSite, ...substitutions) : string > String.raw`\n` === '\\n'
true
Weitere Informationen finden Sie im Kapitel über Template-Literale.
Unicode und Codepunkte
String.fromCodePoint(...codePoints : number[]) : stringString.prototype.codePointAt(pos) : numberpos beginnt (umfasst ein oder zwei JavaScript-Zeichen).String.prototype.normalize(form? : string) : string'NFC' wird für allgemeinen Text empfohlen.Strings finden
String.prototype.startsWith(searchString, position=0) : booleansearchString? Mit position können Sie angeben, wo der zu prüfende String beginnt.String.prototype.endsWith(searchString, endPosition=searchString.length) : booleansearchString? Mit endPosition können Sie angeben, wo der zu prüfende String endet.String.prototype.includes(searchString, position=0) : booleansearchString? Mit position können Sie angeben, wo der zu durchsuchende String beginnt.Strings wiederholen
String.prototype.repeat(count) : stringcount mal, zurück.