Signatur
Beschreibung
Die Methode at() liest ein einzelnes Zeichen, genauer gesagt eine UTF-16-Codeeinheit, aus einem String. Wie bei der Klammerschreibweise str[i] zählt ein positiver Index vom Anfang. Neu ist, dass at() auch negative Indizes versteht: -1 steht für das letzte Zeichen, -2 für das vorletzte und so weiter.
Besonders praktisch ist das, wenn man auf das Ende eines Strings zugreifen will. Statt str[str.length - 1] schreibt man einfach str.at(-1). Das ist kürzer und leichter zu lesen. Außerdem muss man str nicht zweimal auswerten, was bei längeren Ausdrücken wie getName().at(-1) hilft.
Liegt der Index außerhalb des gültigen Bereichs, gibt at() den Wert undefined zurück. Das ist anders als bei charAt(), das in diesem Fall einen leeren String "" liefert. Der Index wird vorher in eine ganze Zahl umgewandelt: Nachkommastellen werden abgeschnitten, und NaN oder ein fehlendes Argument werden zu 0.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $index | number | 0 | Position der gewünschten Codeeinheit. Negative Werte zählen vom Ende (-1 = letztes Zeichen). Der Wert wird in eine ganze Zahl umgewandelt: Nachkommastellen werden abgeschnitten, und NaN sowie undefined werden zu 0. |
Rückgabewert
undefined, wenn der Index außerhalb von -length bis length - 1 liegt.Beispiele
Erstes und letztes Zeichen lesen
const wort = 'JavaScript';
console.log(wort.at(0)); // erstes Zeichen
console.log(wort.at(-1)); // letztes Zeichen
console.log(wort.at(-3)); // drittletztes Zeichen
console.log(wort.at(42)); // außerhalb des Bereichs
Satzzeichen am Ende prüfen
const endetMitSatzzeichen = (text) => ['.', '!', '?'].includes(text.trim().at(-1));
console.log(endetMitSatzzeichen('Hallo Welt!'));
console.log(endetMitSatzzeichen('Hallo Welt '));
console.log(endetMitSatzzeichen(''));
Vergleich mit charAt() und Klammerschreibweise
const s = 'abc';
console.log(s.at(-1)); // 'c'
console.log(s[s.length - 1]); // 'c' – umständlicher
console.log(s[-1]); // undefined – negative Indizes werden nicht unterstützt
console.log(JSON.stringify(s.charAt(-1))); // leerer String
console.log(s.at(5)); // undefined
Vorsicht bei Emojis und Surrogatpaaren
const gruss = 'Hallo 👋';
// at() liefert nur die zweite Hälfte des Surrogatpaars
console.log(gruss.at(-1) === '👋');
// So erhält man das letzte vollständige Zeichen (Codepoint)
const letztesZeichen = [...gruss].at(-1);
console.log(letztesZeichen);
// Wichtig · Fallstricke
- UTF-16-Codeeinheiten statt Zeichen: Emojis und viele seltene Schriftzeichen bestehen aus zwei Codeeinheiten, einem sogenannten Surrogatpaar.
at()gibt dann nur eine Hälfte davon zurück, also einen String, der für sich allein nicht sinnvoll dargestellt werden kann. Wenn Sie ganze Unicode-Codepoints brauchen, zerlegen Sie den String zuerst mit[...str]oderArray.from(str). Für Zeichen, die der Nutzer als eines wahrnimmt (Grapheme, z. B. Emojis mit Hautfarbe), verwenden SieIntl.Segmenter. - Rückgabewert
undefined: Anders alscharAt()gibtat()bei einem ungültigen Indexundefinedzurück, keinen leeren String. Wer Methoden an das Ergebnis anhängt, etwastr.at(-1).toUpperCase(), erhält bei einem leeren String einenTypeError. Optional Chaining schützt davor:str.at(-1)?.toUpperCase(). - Umwandlung des Index:
at('1')funktioniert, weil der String in eine Zahl umgewandelt wird.at(1.9)wird zuat(1), undat()ohne Argument entsprichtat(0). - Kompatibilität: Die Methode gehört zu ES2022 und wird von Chrome 92+, Firefox 90+, Safari 15.4+ und Node.js 16.6+ unterstützt. Ältere Umgebungen brauchen ein Polyfill, zum Beispiel aus
core-js.