You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否对数组使用values()方法?调用报错TypeError问题咨询

问题分析与解决方案

这其实是数组实例的values()方法的浏览器兼容性问题,你完全没遗漏什么——这个方法确实是在较新的浏览器版本才正式实现的!

核心原因拆解

  • 数组的keys()方法是ES6(ECMAScript 2015)就已纳入标准的API,所以Chrome 64、Firefox 58这类旧版本浏览器都支持;
  • 而数组的values()方法是直到ES2017(ECMAScript 2018)才被添加到标准中,Chrome 66+、Firefox 60+才完成了实现,这就导致你在旧版本浏览器中调用它会触发TypeError;
  • Map和Set的values()方法同样是ES6标准的一部分,所以旧版本浏览器也能正常运行,这和数组的values()不是同一批实现的API。

针对旧浏览器的替代方案

如果你需要兼容Chrome 64、Firefox 58这类版本,可以用以下两种方式解决:

  1. 直接使用数组默认迭代器(最省心)
    数组本身的默认迭代器就是遍历值,和values()返回的迭代器效果完全一致,直接用for...of循环遍历数组即可:
const myArray = ['a', 'b', 'c'];
for (const value of myArray) {
  console.log(value); // 输出 'a'、'b'、'c'
}
  1. 手动添加Polyfill
    如果你的代码里大量依赖values()方法的调用形式,可以给数组原型添加兼容补丁:
if (!Array.prototype.values) {
  Array.prototype.values = function() {
    // 数组的默认迭代器就是返回值的迭代器
    return this[Symbol.iterator]();
  };
}

添加后,旧浏览器中调用myArray.values()就能正常返回迭代器,和新版本浏览器表现一致。

内容的提问来源于stack exchange,提问作者NL500

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:10:56