推荐使用 Array.from() 将伪数组转为真数组,它语义清晰、兼容性好;次选扩展运算符 [...arrayLike](现代环境更简洁);老项目可降级用 Array.prototype.slice.call()。

伪数组(类数组对象)比如 arguments、NodeList、HTMLCollection 等,有长度、可索引访问,但没有数组方法(如 map、filter、forEach)。想用数组方法,就得先转成真数组。
用 Array.from() 最推荐
这是 ES6 提供的标准方法,简洁、语义清晰、兼容性好(IE 不支持,但现代项目基本不需考虑 IE):
const nodeList = document.querySelectorAll('div');
const arr = Array.from(nodeList); // ✅ 转为真数组
arr.map(el => el.textContent); // 可直接调用 map
它还能配合映射函数一步处理:
const texts = Array.from(nodeList, el => el.textContent); // 直接提取文本
扩展运算符 [...arrayLike] 更简洁(适合现代环境)
写法最短,可读性强,但要求运行环境支持 ES6+:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
立即学习“Java免费学习笔记(深入)”;
[...document.querySelectorAll('li')].forEach(...)-
const args = [...arguments];(在函数内) - 注意:不能用于没有迭代器接口的旧伪数组(如早期 IE 的
HTMLCollection),但现代浏览器中绝大多数都支持
Array.prototype.slice.call() 兼容性最强(老项目备用)
ES5 时代通用方案,所有浏览器都支持,原理是借用数组的 slice 方法:
const arr = Array.prototype.slice.call(arguments); // 或简写为 const arr = [].slice.call(arguments);
缺点是写法略冗长,且对 null/undefined 会报错,使用前建议加判断。
其他方式(按需选择)
-
Array.from(Array.prototype.values.call(伪数组))—— 冗余,不推荐 -
JSON.parse(JSON.stringify([...伪数组]))—— 仅适用于纯数据,且会丢失函数、DOM 元素等引用类型,慎用 - 手动 for 循环 push —— 效率低、代码长,仅极端兼容场景考虑
优先用 Array.from(),开发体验和可维护性最好;若需支持极老环境,再降级用 slice.call()。扩展运算符适合日常开发,写起来最顺手。

















