Baseline Widely available
Die values()
-Methode von Array
-Instanzen gibt ein neues Array-Iterator-Objekt zurück, das den Wert jedes Elements im Array durchläuft.
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 Parameter
Keine.
RückgabewertEin neues iterierbares Iterator-Objekt.
BeschreibungArray.prototype.values()
ist die Standardimplementierung von Array.prototype[Symbol.iterator]()
.
Array.prototype.values === Array.prototype[Symbol.iterator]; // true
Bei der Verwendung auf sparse arrays durchläuft die values()
-Methode leere Slots, als ob sie den Wert undefined
haben.
Die values()
-Methode ist generisch. Sie erwartet nur, dass der this
-Wert eine length
-Eigenschaft und Schlüssel mit ganzzahligen Werten besitzt.
Da values()
ein iterierbares Iterator-Objekt zurückgibt, können Sie eine for...of
-Schleife verwenden, um darüber 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 auch ein Iterator ist, können Sie direkt die 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 Iterators
Warnung: Das Array-Iterator-Objekt sollte nur einmal verwendet werden. Verwenden Sie es nicht wieder.
Der aus values()
zurückgegebene Iterator ist nicht wiederverwendbar. Wenn next().done = true
oder currentIndex > length
, endet die for...of
-Schleife, und ein weiteres Iterieren hat keinen Effekt.
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 von der aktuellen Position aus fortgesetzt werden, wenn 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"
Veränderungen während der Iteration
Es werden keine Werte im aus values()
zurückgegebenen Array-Iterator-Objekt gespeichert; 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 vom Wert ab, der zu diesem Zeitpunkt an diesem Index gespeichert ist. Wenn sich die Werte im Array ändern, ändern sich die Werte des Array-Iterator-Objekts ebenfalls.
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 iterierenden Methoden speichert das Array-Iterator-Objekt nicht die Länge des Arrays zum Zeitpunkt seiner Erstellung, sondern liest sie bei jeder Iteration einmal. Daher, wenn das Array während der Iteration wächst, besucht der Iterator auch die neuen Elemente. 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 von sparse Arrays
values()
wird leere Slots 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
aus 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 Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4