什么是 JavaScript 的类数组对象?如何转化为数组?

发布时间:2026/10/9 14:32:18
什么是 JavaScript 的类数组对象?如何转化为数组? JavaScript 类数组对象什么是类数组对象类数组对象是具备数组外观但不是真正数组的对象满足两个条件有length属性值为非负整数元素以0, 1, 2...数字索引作为键名constarrayLike{0:a,1:b,2:c,length:3};// 看起来像数组实际是普通对象arrayLike[0];// aarrayLike.length;// 3Array.isArray(arrayLike);// falsearrayLike.map;// undefined —— 没有数组方法常见的类数组对象来源示例函数的argumentsfunction f() { arguments }DOM 的NodeListdocument.querySelectorAll(div)DOM 的HTMLCollectiondocument.forms字符串abc有 length 和索引自定义对象{ 0: x, 1: y, length: 2 }functionfoo(){console.log(typeofarguments.map);// undefinedconsole.log(arguments.length);// 实参数量}foo(1,2,3);转化为数组的方法1.Array.from()— 最推荐constarrArray.from(arrayLike);// [ a, b, c ]语义清晰ES6 标准支持第二个参数映射函数类似mapArray.from(arrayLike,xx.toUpperCase());// [ A, B, C ]2. 展开运算符...constarr[...arrayLike];// [ a, b, c ]最简洁需确保对象是可迭代对象iterablearguments、NodeList可用但自定义类数组对象必须实现[Symbol.iterator]否则报错// 自定义类数组对象没有迭代器展开会报错constlike{0:a,1:b,length:2};[...like];// TypeError: like is not iterable// 需手动添加迭代器like[Symbol.iterator]function*(){for(leti0;ithis.length;i)yieldthis[i];};[...like];// [a, b]3.Array.prototype.slice.call()constarrArray.prototype.slice.call(arrayLike);// [ a, b, c ]ES5 经典写法兼容性最好简写形式[].slice.call(arrayLike)4.Array.prototype.forEach/map借用// 借用 forEach 遍历同时构建新数组constarr[];Array.prototype.forEach.call(arrayLike,itemarr.push(item));本质是借用数组方法不是真正的转换5. 循环遍历构建constarr[];for(leti0;iarrayLike.length;i){arr.push(arrayLike[i]);}最原始适用于任何场景但代码冗长6.Object.values()— 有局限constarrObject.values(arrayLike);// [ a, b, c ]只取值丢弃索引对应关系如果对象有非数字键或 length 属性结果会包含多余值不可靠constlike{0:a,1:b,length:2,name:extra};Object.values(like);// [a, b, 2, extra] ← 混入了 length 和 name方法对比方法兼容性可读性自定义对象额外能力Array.from()ES6优支持映射函数[...obj]ES6优需iterator无slice.call()ES5中支持无循环遍历全部差支持无Object.values()ES8中不可靠无实际场景// arguments 转数组functionsum(){returnArray.from(arguments).reduce((a,b)ab,0);}// NodeList 转数组constdivsArray.from(document.querySelectorAll(div));divs.forEach(dd.classList.add(active));// 配合解构赋值functionfirst(){const[first][...arguments];returnfirst;}一句话总结类数组有 length 和数字索引但不是数组Array.from()是最通用最推荐的转换方式[...]最简洁但要求可迭代。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询