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
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
Wenn values()
auf spärlichen Arrays verwendet wird, durchläuft die 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 einer for...of Schleife
Da values()
einen iterierbaren Iterator zurückgibt, können Sie eine for...of
Schleife verwenden, um ihn zu durchlaufen.
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 next()
Methode direkt 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 Iterables
Warnung: Das Array-Iterator-Objekt sollte ein einmalig verwendbares Objekt sein. Wiederverwenden Sie es nicht.
Das von values()
zurückgegebene Iterable ist nicht wiederverwendbar. Wenn next().done = true
oder currentIndex > length
, endet die for...of
Schleife, und weiteres Durchlaufen 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
Wenn Sie eine break
Anweisung verwenden, um die Iteration vorzeitig zu beenden, kann der Iterator ab der aktuellen Position fortgesetzt werden, wenn Sie ihn weiter durchlaufen.
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 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 an diesem Index gespeichert ist. Wenn sich die Werte im Array ändern, ändern sich auch die vom Array-Iterator-Objekt zurückgegebenen Werte.
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 zur Zeit seiner Erstellung, sondern liest sie bei jeder Iteration einmal. Daher besucht der Iterator neue Elemente, wenn das Array während der Iteration wächst. Dies kann zu Endlosschleifen führen.
const arr = [1, 2, 3];
for (const e of arr) {
arr.push(e * 10);
}
// RangeError: invalid array length
Iteration über spärliche Arrays
values()
wird leere Stellen besuchen, als ob sie undefined
sind.
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 ist, die 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 Language Specification # sec-array.prototype.values |
Browser-Kompatibilität
BCD tables only load in the browser