Start · Sprachen · JavaScript · Referenz · Array.prototype.values()

Array.prototype.values()

Methode

Gibt ein neues Array-Iterator-Objekt zurück, das nacheinander die Werte aller Elemente des Arrays liefert.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Array.prototype.values()

Beschreibung

values() erzeugt einen Array-Iterator, der beim Durchlaufen jeden Elementwert des Arrays in Index-Reihenfolge liefert. Array.prototype.values ist dieselbe Funktion wie Array.prototype[Symbol.iterator]. Deshalb verhält sich for (const x of arr.values()) genau wie for (const x of arr).

Nützlich ist die Methode vor allem, wenn Sie einen Iterator ausdrücklich brauchen: um ihn schrittweise mit next() abzufragen, um ihn an eine Funktion zu übergeben, die ein iterierbares Objekt erwartet, oder um Iterator-Helfer wie map(), filter() oder take() (ES2025) lazy zu verketten, ohne Zwischen-Arrays anzulegen.

Der Iterator arbeitet live. Er kopiert das Array nicht, sondern liest bei jedem Schritt den aktuellen Wert am nächsten Index. Änderungen am Array während der Iteration wirken sich also aus. Lücken in dünn besetzten Arrays (sparse arrays) liefert der Iterator als undefined, er überspringt sie nicht. Die Methode ist generisch und funktioniert auch mit array-ähnlichen Objekten, die eine length-Eigenschaft und Index-Schlüssel haben.

Rückgabewert

Typ
ArrayIterator<T>
Beschreibung
Ein neues, iterierbares Iterator-Objekt. Jeder Aufruf von next() liefert { value, done } mit dem nächsten Elementwert, bis done den Wert true hat.

Beispiele

Werte mit for...of durchlaufen

const farben = ['rot', 'grün', 'blau'];

for (const farbe of farben.values()) {
  console.log(farbe);
}
rot grün blau

Iterator schrittweise mit next() abfragen

const schritte = ['Laden', 'Prüfen', 'Speichern'];
const it = schritte.values();

console.log(it.next()); // erster Schritt
console.log(it.next().value);
console.log(it.next().value);
console.log(it.next()); // erschöpft
{ value: 'Laden', done: false } Prüfen Speichern { value: undefined, done: true }

Iterator ist nach einem Durchlauf verbraucht

const zahlen = [1, 2, 3];
const it = zahlen.values();

console.log([...it]); // erster Durchlauf
console.log([...it]); // leer – Iterator ist erschöpft
[ 1, 2, 3 ] []

Lazy verarbeiten mit Iterator-Helfern und array-ähnlichen Objekten

// Iterator-Helfer (ES2025, moderne Browser / Node.js 22+)
const preise = [12, 99, 5, 240, 48];
const teure = preise.values()
  .filter((p) => p > 40)
  .map((p) => `${p} €`)
  .toArray();
console.log(teure);

// Generisch auf array-ähnlichen Objekten
const arrayLike = { length: 2, 0: 'a', 1: 'b' };
console.log([...Array.prototype.values.call(arrayLike)]);
[ '99 €', '240 €', '48 €' ] [ 'a', 'b' ]

// Wichtig · Fallstricke

  • Einmalig verwendbar: Ein Iterator lässt sich nicht zurücksetzen. Für einen zweiten Durchlauf rufen Sie values() erneut auf.
  • Live-Verhalten: Wenn Sie während der Iteration Elemente hinzufügen oder entfernen, ändert sich, welche Werte der Iterator liefert. Kürzen Sie das Array z. B. per pop(), endet die Iteration früher.
  • Lücken: Anders als forEach() liefert values() für leere Plätze in dünn besetzten Arrays den Wert undefined.
  • Kein Array: Der Rückgabewert ist ein Iterator und kein Array. Methoden wie length oder slice() fehlen. Mit [...it] oder Array.from(it) wandeln Sie ihn in ein Array um.
  • Kompatibilität: Die Methode ist seit ES2015 in allen modernen Browsern und in Node.js verfügbar. Iterator-Helfer wie .map() und .filter() direkt auf dem Iterator gehören zu ES2025 und fehlen in älteren Umgebungen.