Array.prototype.values()

基线 广泛可用

此功能已得到良好建立,并在许多设备和浏览器版本中有效。它自 2018 年 5 月.

报告反馈

试一试

语法

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
values()

js

参数

无。

返回值

描述

一个新的 可迭代的迭代器对象

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
Array.prototype.values === Array.prototype[Symbol.iterator]; // true

Array.prototype.values()Array.prototype[Symbol.iterator]() 的默认实现。

当在 稀疏数组 上使用时,values() 方法将空槽迭代为具有 value undefined 的槽。

示例

values() 方法是 泛型 的。它只期望 this value 具有 length 属性和整数键属性。

使用 for...of 循环迭代

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
const arr = ["a", "b", "c", "d", "e"];
const iterator = arr.values();

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

因为 values() 返回一个可迭代的迭代器,所以可以使用 for...of 循环来迭代它。

使用 next() 迭代

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
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

因为返回值也是一个迭代器,所以可以直接调用它的 next() 方法。

重用可迭代对象

警告: 数组迭代器对象应该是只使用一次的对象。不要重用它。

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
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

values() 返回的可迭代对象不可重用。当 next().done = truecurrentIndex > length 时,for...of 循环结束,并且进一步迭代它不会产生任何效果。

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
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"

如果使用 break 语句提前结束迭代,则迭代器可以在继续迭代时从当前位置恢复。

迭代期间的修改

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
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"

values() 返回的数组迭代器对象中没有存储任何 value;相反,它存储创建时使用的数组的地址,并在每次迭代时读取当前访问的索引。因此,它的迭代输出取决于该索引在步进时存储的值。如果数组中的值发生变化,数组迭代器对象的 value 也会发生变化。

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
const arr = [1, 2, 3];
for (const e of arr) {
  arr.push(e * 10);
}
// RangeError: invalid array length

迭代方法 不同,数组迭代器对象不会在创建时保存数组的长度,而是在每次迭代时读取一次。因此,如果数组在迭代期间增长,迭代器也会访问新元素。这可能会导致无限循环。

迭代稀疏数组

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
for (const element of [, "a"].values()) {
  console.log(element);
}
// undefined
// 'a'

values() 将访问空槽,就好像它们是 undefined 一样。

在非数组对象上调用 values()

values() 方法是 Array 实例的一种方法,它返回一个新的数组迭代器 对象,该对象遍历数组中每个项目的 value。
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

规范

values() 方法读取 thislength 属性,然后访问每个键为非负整数且小于 length 的属性。
规范
# ECMAScript 语言规范

浏览器兼容性

sec-array.prototype.values

另请参阅