array.prototype.values()返回包含数组各元素(含空位为undefined)的迭代器,支持for...of、扩展运算符和array.from()等用法,不修改原数组。

Array.prototype.values() 方法返回一个新数组迭代器对象,该对象包含数组中每个索引对应的值(即元素本身),按索引升序排列。
基本用法
调用 values() 不会改变原数组,只生成一个可遍历的迭代器:
const arr = ['a', 'b', 'c'];
const iterator = arr.values();
console.log(iterator); // Array Iterator {}
这个迭代器对象实现了 Symbol.iterator,因此可直接用于 for...of 循环或扩展运算符。
配合 for...of 遍历
这是最常见、最直观的使用方式:
- 每次调用
iterator.next()返回{ value: 当前元素, done: 布尔值 } - 在
for...of中自动调用next(),只暴露value
const colors = ['red', 'green', 'blue'];
for (const color of colors.values()) {
console.log(color); // red → green → blue
}
转换为数组或其它结构
迭代器可被转为真实数组、Set、Map 等:
- 用扩展运算符:
[...arr.values()] - 用
Array.from():Array.from(arr.values()) - 传给
new Set()去重(若原数组有重复值)
const nums = [10, 20, 30];
console.log([...nums.values()]); // [10, 20, 30]
console.log(Array.from(nums.values())); // [10, 20, 30]
console.log(new Set(nums.values())); // Set { 10, 20, 30 }
注意稀疏数组和空位
对稀疏数组(含空位)调用 values() 时,空位会被当作 undefined 处理:
const sparse = [1, , 3]; // 索引 1 是空位 console.log([...sparse.values()]); // [1, undefined, 3] // 对比 keys() 和 entries() console.log([...sparse.keys()]); // [0, 1, 2] console.log([...sparse.entries()]); // [[0, 1], [1, undefined], [2, 3]]
所以 values() 总是返回与数组长度相等的元素序列,空位不跳过,也不报错。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











