Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Array.prototype.values()

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Mai 2018 browserübergreifend verfügbar.

Die Methode values() von Array-Instanzen gibt ein neues Array-Iterator-Objekt zurück, das über die Werte der einzelnen Elemente im Array iteriert.

Probieren Sie es aus

const array = ["a", "b", "c"];
const iterator = array.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

Ein neues iterierbares Iterator-Objekt.

Beschreibung

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

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

Bei Arrays mit Lücken behandelt die Methode values() leere Positionen bei der Iteration so, als hätten sie den Wert undefined.

Die Methode values() ist generisch. Sie setzt lediglich voraus, dass der this-Wert eine length-Eigenschaft und Eigenschaften mit ganzzahligen Schlüsseln hat.

Beispiele

Iteration mit einer for...of-Schleife

Da values() einen iterierbaren Iterator zurückgibt, können Sie mit einer for...of-Schleife darüber 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 seine Methode next() direkt 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 nur einmal verwendet werden. Verwenden Sie es nicht erneut.

Das von values() zurückgegebene iterierbare Objekt kann nicht wiederverwendet werden. Wenn next().done = true oder currentIndex > length gilt, endet die for...of-Schleife. Eine weitere Iteration über das Objekt hat dann 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);
}
// No output

Wenn Sie die Iteration mit einer break-Anweisung vorzeitig beenden, kann der Iterator bei einer erneuten Iteration an der aktuellen Position fortfahren.

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

Das von values() zurückgegebene Array-Iterator-Objekt speichert keine Werte. Stattdessen speichert es eine Referenz auf das Array, mit dem es erstellt wurde, und liest bei jedem Iterationsschritt den jeweils besuchten Index aus. Die ausgegebenen Werte hängen daher davon ab, welcher Wert zum Zeitpunkt des jeweiligen Schritts an diesem Index gespeichert ist. Ändern sich die Werte im Array, ändern sich auch die vom Array-Iterator-Objekt ausgegebenen Werte.

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"

Anders als iterative Methoden speichert das Array-Iterator-Objekt die Länge des Arrays nicht zum Zeitpunkt seiner Erstellung, sondern liest sie bei jedem Iterationsschritt erneut. Wächst das Array während der Iteration, besucht der Iterator daher 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

Iteration über Arrays mit Lücken

values() besucht leere Positionen so, als enthielten sie undefined.

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

Aufruf von values() für Objekte, die keine Arrays sind

Die Methode values() liest die length-Eigenschaft von this und greift anschließend 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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-array.prototype.values

Browser-Kompatibilität

Siehe auch