arr.values() 返回一个按索引顺序产出数组元素值的 Array Iterator 对象,需配合 for...of、展开运算符或 next() 使用,不直接执行遍历;区别于 Object.values() 及 arr.keys()/entries()。

JavaScript 中数组本身没有 values() 方法——这个方法属于 Array.prototype,但它是 ES2015(ES6)引入的**返回迭代器对象**的方法,不是直接遍历值的“循环语句”。它常被误解为类似 forEach 的执行型方法,其实它返回的是一个 Array Iterator,需要配合 for...of、展开运算符或手动调用 next() 才能获取值。
✅ values() 返回什么?
arr.values() 返回一个迭代器对象,该对象按索引顺序逐个产出数组元素的值(不是键值对,不包含索引)。
例如:
let iterator = arr.values();
console.log(iterator); // Array Iterator {}
console.log(iterator.next()); // { value: 'a', done: false }
console.log(iterator.next()); // { value: 'b', done: false }
✅ 三种常用方式使用 values() 遍历值
-
用 for...of 循环(最推荐):
for (const value of arr.values()) {
console.log(value); // 'a', 'b', 'c'
} -
用展开运算符转为数组:
const valuesArray = [...arr.values()];
console.log(valuesArray); // ['a', 'b', 'c'] -
手动调用 next()(适合控制流场景):
let iter = arr.values();
let result;
while (!(result = iter.next()).done) {
console.log(result.value); // 'a', 'b', 'c'
}
⚠️ 注意:不要和 Object.values() 混淆
Object.values(obj) 是把对象自身的可枚举属性值转成数组,而 arr.values() 是数组方法,返回迭代器。两者用途和返回类型不同,不能互换。
? 小技巧:values() 和 entries()/keys() 的区别
-
arr.keys()→ 迭代器,产出索引(0, 1, 2…) -
arr.values()→ 迭代器,产出元素值('a', 'b', 'c'…) -
arr.entries()→ 迭代器,产出[index, value]数组(如[0, 'a'])











