JavaScript中数组的values()是ES6新增的原型方法,返回值迭代器而非数组,需用for...of、展开运算符或next()遍历;它与直接for...of遍历效果相同,但仅适用于真数组,不支持类数组或普通对象。

JavaScript 中数组本身没有 values() 方法——这个方法属于 Array.prototype,但它是 ES6 新增的迭代器方法,返回一个 Array Iterator 对象,可用于遍历数组元素值。
values() 返回的是迭代器,不是数组
调用 arr.values() 不会直接得到值的列表,而是获得一个可迭代对象。需要配合 for...of、展开运算符([...])或 next() 手动取值:
-
❌ 错误写法:
console.log(arr.values())→ 输出Array Iterator {},不是具体值 -
✅ 正确用法1(for...of):
for (const value of arr.values()) { console.log(value); } -
✅ 正确用法2(展开成新数组):
const valuesArr = [...arr.values()]; // [1, 2, 3] -
✅ 正确用法3(手动调用 next):
const iter = arr.values(); console.log(iter.next().value); // 第一个值
values() 和 for...of 直接遍历数组效果一样
对纯数组来说,arr.values() 和 for (const v of arr) 行为一致,都按索引顺序返回每个元素值。区别在于:values() 明确表达了“只取值”的意图,而直接遍历数组是语法糖,底层也调用了 values() 迭代器。
例如:
立即学习“Java免费学习笔记(深入)”;
const colors = ['red', 'green', 'blue'];
for (const val of colors.values()) {
console.log(val); // red → green → blue
}
注意:values() 不适用于类数组或普通对象
values() 是数组实例方法,只有 Array 或继承自 Array 的对象才有。以下情况会报错:
-
document.querySelectorAll('div').values()→ 报错,NodeList 没有values(可用Array.from().values()转换) -
{a:1, b:2}.values()→ 报错,普通对象没有该方法(可用Object.values()) -
arguments.values()→ 报错(arguments是类数组,需先转数组:Array.from(arguments).values())
实用小技巧:结合 entries() 和 keys() 理解定位
数组还提供另外两个迭代器方法,三者常一起理解:
-
arr.keys()→ 返回索引迭代器:0, 1, 2, ... -
arr.values()→ 返回值迭代器:arr[0], arr[1], arr[2], ... -
arr.entries()→ 返回键值对迭代器:[0, 'red'], [1, 'green'], [2, 'blue']
比如想同时打印索引和值,用 entries() 更直观:
for (const [index, value] of arr.entries()) {
console.log(`${index}: ${value}`);
}


















