Array.from 是将类数组对象(如 arguments、NodeList、字符串等)转为真正数组的首选方法,语义清晰、兼容性好且支持映射处理;类数组对象需有 length 属性和数字索引,但非 Array 实例。

Array.from 是 JavaScript 中将类数组对象(如 arguments、NodeList、字符串等)转为真正数组的首选方法,比 [...iterable] 或 Array.prototype.slice.call() 更语义清晰、兼容性更好,且支持映射处理。
识别什么是类数组对象
类数组对象指拥有 length 属性和按数字索引存储元素的对象,但并非 Array 实例,因此不能直接调用 push、map 等数组方法。常见例子包括:
- 函数内部的
arguments对象 -
document.querySelectorAll('div')返回的NodeList(尤其在旧版浏览器中) - 字符串(每个字符按索引排列)
- 手动构造的带
length和数字键的对象,例如{0: 'a', 1: 'b', length: 2}
基础用法:直接转换
只需传入类数组对象,Array.from 就能返回新数组:
// NodeList 转数组
const divs = document.querySelectorAll('div');
const divArray = Array.from(divs);
<p>// arguments 转数组(ES5 时代常用)
function sum() {
const nums = Array.from(arguments);
return nums.reduce((a, b) => a + b, 0);
}</p><p>// 字符串转字符数组
const chars = Array.from('hello'); // ['h', 'e', 'l', 'l', 'o']
进阶技巧:一步完成映射
第二个参数可传入映射函数,避免先转数组再调用 map,提升简洁性和性能:
立即学习“Java免费学习笔记(深入)”;
- 对
NodeList提取文本内容:Array.from(divs, el => el.textContent) - 将类数组数字字符串转为真数字:
Array.from('123', Number)→[1, 2, 3] - 结合索引做处理:
Array.from({length: 3}, (_, i) => i * 2)→[0, 2, 4](常用于生成数字序列)
注意边界情况
不是所有“像数组”的对象都能被正确转换:
- 缺少
length属性会得到空数组:Array.from({0: 'a', 1: 'b'})→[] -
length为非整数或负数时行为可能不符合预期,建议确保其为自然数 - 某些宿主对象(如旧版 IE 的某些集合)可能不完全符合迭代要求,必要时加简单兜底逻辑


















