Signatur
Beschreibung
at() liest ein einzelnes Element aus einem typisierten Array wie Uint8Array, Float32Array oder BigInt64Array. Anders als die Klammerschreibweise ta[i] kann die Methode auch negative Indizes verarbeiten: ta.at(-1) gibt das letzte Element zurück, ta.at(-2) das vorletzte und so weiter. Die umständliche Schreibweise ta[ta.length - 1] braucht man damit nicht mehr.
Der Index wird zuerst in eine Ganzzahl umgewandelt. Nachkommastellen werden dabei in Richtung null abgeschnitten, und NaN sowie ein fehlendes Argument werden zu 0. Ist der Wert negativ, wird length addiert. Liegt der Index danach außerhalb von 0 bis length - 1, gibt die Methode undefined zurück und wirft keinen Fehler.
Typische Einsatzfälle sind das Auslesen der letzten Messwerte in Audio- oder Sensorpuffern, der letzten Bytes eines Binärprotokolls (z. B. einer Prüfsumme) oder allgemein jeder Zugriff relativ zum Ende eines Puffers. Das Verhalten ist dasselbe wie bei Array.prototype.at(). Allerdings ist TypedArray.prototype.at() nicht generisch: Die Methode funktioniert nur mit echten typisierten Arrays.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $index | number | 0 | Index des gewünschten Elements, beginnend bei null. Negative Werte zählen vom Ende aus (-1 = letztes Element). Der Wert wird in eine Ganzzahl umgewandelt, Nachkommastellen werden abgeschnitten. |
Rückgabewert
BigInt64Array und BigUint64Array ist es ein bigint, sonst eine number. Liegt der Index außerhalb des gültigen Bereichs, wird undefined zurückgegeben.Beispiele
Positive und negative Indizes
const bytes = new Uint8Array([10, 20, 30, 40, 50]);
console.log(bytes.at(0)); // erstes Element
console.log(bytes.at(-1)); // letztes Element
console.log(bytes.at(-2)); // vorletztes Element
console.log(bytes.at(10)); // außerhalb des Bereichs
console.log(bytes.at(1.9)); // wird zu 1 abgeschnitten
Prüfsumme am Ende eines Binärpakets prüfen
// Paket: Nutzdaten + 1 Byte Prüfsumme (Summe der Nutzdaten mod 256)
const packet = new Uint8Array([0x01, 0x02, 0x03, 0x06]);
const isValid = (pkt) => {
const checksum = pkt.at(-1);
const payload = pkt.subarray(0, -1);
const sum = payload.reduce((acc, b) => (acc + b) & 0xff, 0);
return sum === checksum;
};
console.log(isValid(packet));
Letzten Messwert aus einem Sensorpuffer lesen
const samples = new Float32Array([21.5, 21.7, 22.1, 22.4]);
const latest = samples.at(-1);
const previous = samples.at(-2);
const trend = latest - previous;
console.log(`Aktuell: ${latest}, Trend: ${trend.toFixed(2)}`);
BigInt-Array und leeres Array
const ids = new BigInt64Array([100n, 200n, 300n]);
console.log(ids.at(-1));
const empty = new Int16Array(0);
console.log(empty.at(0));
console.log(empty.at(-1));
// Wichtig · Fallstricke
- Kompatibilität: Teil von ES2022 und in allen modernen Browsern verfügbar (Chrome/Edge 92+, Firefox 90+, Safari 15.4+) sowie in Node.js ab 16.6. Für ältere Umgebungen gibt es ein Polyfill, z. B. über
core-js. - Negative Indizes nur mit
at():ta[-1]liest kein Element vom Ende, sondern gibtundefinedzurück. Bei typisierten Arrays wird"-1"nämlich als ungültiger ganzzahliger Index behandelt und nicht als normale Eigenschaft gespeichert. - Nur lesend: Mit
at()kann man keine Werte schreiben. Zum Schreiben verwendet manta[i] = wertoderta.with(index, wert)(ES2023, gibt eine Kopie zurück und unterstützt ebenfalls negative Indizes). - Typumwandlung: Ein Index wie
"abc"oderNaNwird zu0, gibt also das erste Element zurück und nichtundefined. Bei unsicheren Eingaben sollte man den Index vorher prüfen. - Abgekoppelte Puffer: Wurde der zugrunde liegende
ArrayBufferabgekoppelt (etwa durchpostMessagemit Übertragung odertransfer()), istlengthgleich0undat()gibt immerundefinedzurück.