Array.from()是ES6静态方法,可将类数组对象(如NodeList、HTMLCollection)或可迭代对象(如Set、Map)转为真数组,支持映射处理且语义明确,现代项目首选。

Array.from() 是 ES6 提供的静态方法,能直接将类数组对象(如 NodeList、HTMLCollection)或可迭代对象(如 Set、Map)转为真正的数组,从而使用 map、filter、reduce 等原生数组方法。jQuery 对象虽不是标准类数组,但也能借助其 get() 或结合 Array.from() 巧妙处理。
转换原生 NodeList 或 HTMLCollection
现代浏览器中,document.querySelectorAll()、document.getElementsByTagName() 等返回的是 NodeList(部分为只读类数组),可直接传给 Array.from():
const buttons = document.querySelectorAll('button');
const arr = Array.from(buttons); // ✅ 转为真实数组
arr.map(btn => btn.classList.add('active'));
注意:IE 不支持 Array.from(),需搭配 polyfill 或改用 [...nodeList](同样需兼容性考虑)。
处理 jQuery 对象:推荐先用 get() 再转换
jQuery 对象是包装器对象,自身不是类数组,不能直接被 Array.from() 识别。正确做法是先调用 .get() 获取底层 DOM 元素数组(或用 [].slice.call($obj)):
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
const $divs = $('div');
const divArr = Array.from($divs.get()); // ✅ 安全可靠
// 或一步写法(ES2015+):
const divArr2 = Array.from($('div').get());
不建议直接对 jQuery 对象用 Array.from($divs) —— 它会尝试遍历 jQuery 的属性(如 length、selector),结果不符合预期。
进阶:转换时同步做映射(省去额外 map)
Array.from() 支持第二个参数作为映射函数,可在转换同时提取/处理数据,避免链式调用:
- 提取所有按钮的文字内容:
- 从 jQuery 集合中批量获取 data 属性:
const texts = Array.from(
document.querySelectorAll('button'),
el => el.textContent.trim()
); // ['提交', '取消', '重置']
const ids = Array.from(
$('input[data-id]').get(),
el => el.dataset.id
);
替代方案对比与选型建议
-
[...nodeList]:简洁,但 IE 完全不支持,适合现代项目 -
Array.prototype.slice.call(nodeList):兼容老浏览器,略冗长 -
jQuery.toArray():专为 jQuery 设计,语义清晰,返回原生数组,无需get()中转 -
Array.from():语义明确、支持映射、现代标准,推荐新项目首选
只要目标环境支持 ES6,Array.from() 就是最直观、扩展性最强的选择。对 jQuery 用户,记住口诀:“先 .get(),再 from”。

















