Array.from(类数组对象)是标准范式,语义明确、兼容性好,支持NodeList、HTMLCollection、arguments等,IE11+起稳定运行,带映射回调可一步完成转换与处理。

直接用 Array.from(类数组对象) 就是标准范式。它语义明确、兼容性好、不依赖迭代器,且能安全处理 NodeList、HTMLCollection、arguments 等常见类数组结构。
核心写法:一步到位,不绕弯
不需要包装、不需借用方法、不靠扩展运算符兜底——只要对象有 length 属性和数字索引,就能直接转:
Array.from(document.querySelectorAll('button'))Array.from(document.forms)function f() { return Array.from(arguments); }
这种写法在 IE11+、Chrome 45+、Firefox 32+ 均稳定运行,现代项目中已是首选。
带映射的写法:转换 + 处理一次完成
第二个参数传回调函数,省去后续 .map(),尤其适合 DOM 元素提取属性:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
Array.from(inputs, el => el.value)—— 直接得到值数组 Array.from(buttons, btn => ({ id: btn.id, text: btn.textContent }))-
Array.from('123', Number)—— 字符串转数字数组
注意:回调函数接收两个参数 —— 当前元素和索引,thisArg 很少用,一般可忽略。
兼容不可迭代类数组:唯一可靠方案
某些旧环境下的 NodeList 或自定义类数组(如 {0:'a',1:'b',length:2})没有 Symbol.iterator,扩展运算符会失败,而 Array.from 会自动 fallback 到索引遍历:
- 它先检查
length,再按0、1、2… 顺序取值,不依赖迭代协议 - 比
[...nodeList]更健壮,比[].slice.call(nodeList)更简洁清晰 - 对
arguments支持完美,箭头函数除外(因其无arguments绑定)
避坑提醒:别写错、别误用
常见错误直接影响结果或抛错:
- 漏括号:
Array.from(document.querySelectorAll('div'))✅;Array.from(document.querySelectorAll)❌(传的是函数,不是结果) - 误当通用转换器:
Array.from(null)或Array.from(undefined)会报错,需提前校验 - 混淆用途:
Array.prototype.map.call(arrLike, fn)虽返回数组,但本质是“调用 map”,不是“构造数组”,语义不清、不可复用

















