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 iteriert.
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
values()
Parameter
Keine.
Rückgabewert
Ein neues iterierbares Iterator-Objekt.
Beschreibung
Array.prototype.values()
ist die Standardimplementierung von Array.prototype[Symbol.iterator]()
.
Array.prototype.values === Array.prototype[Symbol.iterator]; // true
Bei der Verwendung auf lückenhaften Arrays iteriert die values()
-Methode leere Stellen, als hätten sie den Wert undefined
.
Die values()
-Methode ist generisch. Sie erwartet nur, dass der this
-Wert eine length
-Eigenschaft und Integer-Index-Eigenschaften besitzt.
Beispiele
Iteration mit der for...of-Schleife
Da values()
einen iterierbaren Iterator zurückgibt, können Sie eine for...of
-Schleife verwenden, um ihn zu iterieren.
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 ebenfalls ein Iterator ist, können Sie direkt dessen next()
-Methode aufrufen.
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
Warnung: Das Array-Iterator-Objekt sollte nur einmalig verwendet werden. Verwenden Sie es nicht erneut.
Das aus values()
zurückgegebene Iterierbare ist nicht wiederverwendbar. Wenn next().done = true
oder currentIndex > length
, endet die for...of
-Schleife, und ein weiteres Iterieren hat keine Wirkung.
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
Wird eine break
-Anweisung verwendet, um die Iteration frühzeitig zu beenden, kann der Iterator vom aktuellen Stand aus fortfahren, wenn er weiter iteriert wird.
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 werden keine Werte im Array-Iterator-Objekt, das von values()
zurückgegeben wird, gespeichert. Stattdessen speichert es die Adresse des Arrays, das bei der Erstellung verwendet wurde, und liest den derzeit besuchten Index bei jeder Iteration. Daher hängt die Iterationsausgabe von dem Wert ab, der zu diesem Zeitpunkt an diesem Index gespeichert ist. Wenn sich die Werte im Array ändern, ändern sich auch die Werte des Array-Iterator-Objekts.
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 bei iterativen Methoden speichert das Array-Iterator-Objekt nicht die Länge des Arrays zum Zeitpunkt seiner Erstellung, sondern liest sie bei jeder Iteration. Wächst das Array während der Iteration, besucht der Iterator auch die neuen Elemente. Dies kann zu endlosen Schleifen führen.
const arr = [1, 2, 3];
for (const e of arr) {
arr.push(e * 10);
}
// RangeError: invalid array length
Iteration lückenhafter Arrays
values()
besucht leere Stellen, als wären sie undefined
.
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 nicht-negative Ganzzahl kleiner als length
ist.
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
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
values |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
- Has more compatibility info.