Array.prototype.values()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since May 2018.

Die values() Methode von Array Instanzen gibt ein neues Array-Iterator Objekt zurück, das den Wert jedes Elements im Array durchläuft.

Probieren Sie es aus

const array1 = ["a", "b", "c"];
const iterator = array1.values();

for (const value of iterator) {
  console.log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

js
values()

Parameter

Keine.

Rückgabewert

Beschreibung

Array.prototype.values() ist die Standardimplementierung von Array.prototype[Symbol.iterator]().

js
Array.prototype.values === Array.prototype[Symbol.iterator]; // true

Wenn die Methode auf lückenhafte Arrays angewendet wird, iteriert die values() Methode leere Stellen, als ob sie den Wert undefined hätten.

Die values() Methode ist generisch. Sie erwartet nur, dass der this-Wert eine length Eigenschaft und integerindizierte Eigenschaften hat.

Beispiele

Iteration mit for...of Schleife

Da values() einen iterierbaren Iterator zurückgibt, können Sie eine for...of Schleife verwenden, um ihn zu iterieren.

js
const arr = ["a", "b", "c", "d", "e"];
const iterator = arr.values();

for (const letter of iterator) {
  console.log(letter);
} // "a" "b" "c" "d" "e"

Iteration mit next()

Da der Rückgabewert auch ein Iterator ist, können Sie direkt die next() Methode aufrufen.

js
const arr = ["a", "b", "c", "d", "e"];
const iterator = arr.values();
iterator.next(); // { value: "a", done: false }
iterator.next(); // { value: "b", done: false }
iterator.next(); // { value: "c", done: false }
iterator.next(); // { value: "d", done: false }
iterator.next(); // { value: "e", done: false }
iterator.next(); // { value: undefined, done: true }
console.log(iterator.next().value); // undefined

Wiederverwendung des iterierbaren Objekts

Warnung: Das Array-Iterator-Objekt sollte ein Einmalobjekt sein. Verwenden Sie es nicht erneut.

Das von values() zurückgegebene iterierbare Objekt ist nicht wiederverwendbar. Wenn next().done = true oder currentIndex > length ist, endet die for...of Schleife, und weiteres Iterieren hat keine Wirkung.

js
const arr = ["a", "b", "c", "d", "e"];
const values = arr.values();
for (const letter of values) {
  console.log(letter);
}
// "a" "b" "c" "d" "e"
for (const letter of values) {
  console.log(letter);
}
// undefined

Wenn Sie eine break Anweisung verwenden, um die Iteration vorzeitig zu beenden, kann der Iterator beim Fortsetzen der Iteration von der aktuellen Position aus fortgesetzt werden.

js
const arr = ["a", "b", "c", "d", "e"];
const values = arr.values();
for (const letter of values) {
  console.log(letter);
  if (letter === "b") {
    break;
  }
}
// "a" "b"

for (const letter of values) {
  console.log(letter);
}
// "c" "d" "e"

Änderungen während der Iteration

Es sind keine Werte im Array-Iterator-Objekt gespeichert, das von values() zurückgegeben wird; stattdessen speichert es die Adresse des Arrays, das bei seiner Erstellung verwendet wurde, und liest den aktuell besuchten Index bei jeder Iteration. Daher hängt die Ausgabe der Iteration von dem Wert ab, der zum Zeitpunkt des Durchlaufs in diesem Index gespeichert ist. Wenn sich die Werte im Array ändern, ändern sich auch die Werte des Array-Iterator-Objekts.

js
const arr = ["a", "b", "c", "d", "e"];
const iterator = arr.values();
console.log(iterator); // Array Iterator { }
console.log(iterator.next().value); // "a"
arr[1] = "n";
console.log(iterator.next().value); // "n"

Im Gegensatz zu iterativen Methoden speichert das Array-Iterator-Objekt nicht die Länge des Arrays zum Zeitpunkt seiner Erstellung, sondern liest sie bei jeder Iteration einmal. Wenn das Array während der Iteration wächst, besucht der Iterator auch die neuen Elemente. Dies kann zu Endlosschleifen führen.

js
const arr = [1, 2, 3];
for (const e of arr) {
  arr.push(e * 10);
}
// RangeError: invalid array length

Iterieren von lückenhaften Arrays

values() wird leere Stellen besuchen, als wären sie undefined.

js
for (const element of [, "a"].values()) {
  console.log(element);
}
// undefined
// 'a'

Aufrufen von values() auf Nicht-Array-Objekten

Die values() Methode liest die length Eigenschaft von this und greift dann auf jede Eigenschaft zu, deren Schlüssel eine nichtnegative Ganzzahl kleiner als length ist.

js
const arrayLike = {
  length: 3,
  0: "a",
  1: "b",
  2: "c",
  3: "d", // ignored by values() since length is 3
};
for (const entry of Array.prototype.values.call(arrayLike)) {
  console.log(entry);
}
// a
// b
// c

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-array.prototype.values

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch