array.from()能直接转换jquery对象,因其专为处理类数组对象设计,jquery对象具备length属性和数字索引,满足条件,可一键转为标准数组并保留dom引用。

jQuery 对象本身不是真正的数组,而是类数组(伪数组):它有 length 属性和按数字索引存储的 DOM 元素(如 [0], [1]),但没有数组方法(如 map、filter、forEach)。Array.from() 正好能识别这种结构,一键转为标准数组。
为什么 Array.from() 能直接转换 jQuery 对象
Array.from() 的设计目标之一就是处理“可迭代对象”和“类数组对象”。jQuery 对象满足类数组条件:拥有 length 属性,且索引从 0 开始连续。因此无需额外包装或遍历,调用即可生效。
- ✅ 支持稀疏索引(自动跳过空位)
- ✅ 保留原始 DOM 元素引用(非副本)
- ✅ 不依赖 jQuery 内部 API,兼容性稳定
基础转换写法(推荐)
最简洁安全的方式:
jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。
const $divs = $('div');<br>const divArray = Array.from($divs); // → [div, div, div...]
转换后可直接使用原生数组方法:
divArray.map(el => el.id)divArray.filter(el => el.classList.contains('active'))divArray.forEach(el => el.remove())
对比其他常见转换方式
传统写法如 [].slice.call($divs) 或 Array.prototype.slice.call($divs) 仍有效,但已过时;ES6 后 Array.from() 更语义清晰、无兼容风险。
-
[].slice.call($divs):依赖原型链,IE8–不支持call绑定类数组(实际 jQuery 自身已做兼容,但冗余) -
$.makeArray($divs):jQuery 提供的方法,功能等价,但引入了框架依赖 -
[...$divs](扩展运算符):效果相同,但底层也依赖Array.from的同套迭代机制,语法更短,二者可任选
注意边界情况
少数 jQuery 版本或特殊构造(如空集合 $() 或动态集合)仍能正确转换,但需留意:
- 空 jQuery 对象 →
Array.from($())返回[](正确) - 含文本节点/注释节点的集合(极少见)→ 仍会转为对应 Node 实例数组,行为一致
- 若 jQuery 对象被销毁或 DOM 变化,原生数组中的元素仍是有效引用(DOM 节点未被回收)










