Start · Sprachen · JavaScript · Referenz · String.prototype.at()

String.prototype.at()

Methode

Gibt die einzelne UTF-16-Codeeinheit an der angegebenen Position als neuen String zurück. Negative Indizes zählen dabei vom Ende des Strings.

seit JavaScript ES2022 (Baseline: alle modernen Browser seit 2022, Kategorie: method-property

Signatur

String.prototype.at(index)

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

Typ
string | undefined
Beschreibung
Ein String aus genau einer UTF-16-Codeeinheit oder 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
J t i undefined

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(''));
true false false

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
c c undefined "" 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);
false 👋

// 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] oder Array.from(str). Für Zeichen, die der Nutzer als eines wahrnimmt (Grapheme, z. B. Emojis mit Hautfarbe), verwenden Sie Intl.Segmenter.
  • Rückgabewert undefined: Anders als charAt() gibt at() bei einem ungültigen Index undefined zurück, keinen leeren String. Wer Methoden an das Ergebnis anhängt, etwa str.at(-1).toUpperCase(), erhält bei einem leeren String einen TypeError. 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 zu at(1), und at() ohne Argument entspricht at(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.