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

TypedArray.prototype.at()

Methode

Gibt das Element eines typisierten Arrays am angegebenen Index zurück. Negative Indizes zählen vom Ende aus, <code>-1</code> ist also das letzte Element.

seit JavaScript ES2022 Kategorie: method-property

Signatur

TypedArray.prototype.at(index)

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

Typ
number | bigint | undefined
Beschreibung
Das Element am angegebenen Index. Bei 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
10 50 40 undefined 20

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));
true

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)}`);
Aktuell: 22.399999618530273, Trend: 0.30

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));
300n undefined undefined

// 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 gibt undefined zurü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 man ta[i] = wert oder ta.with(index, wert) (ES2023, gibt eine Kopie zurück und unterstützt ebenfalls negative Indizes).
  • Typumwandlung: Ein Index wie "abc" oder NaN wird zu 0, gibt also das erste Element zurück und nicht undefined. Bei unsicheren Eingaben sollte man den Index vorher prüfen.
  • Abgekoppelte Puffer: Wurde der zugrunde liegende ArrayBuffer abgekoppelt (etwa durch postMessage mit Übertragung oder transfer()), ist length gleich 0 und at() gibt immer undefined zurück.