htmlcollection 不能直接调用 slice 是因为它虽具 length 和索引,但无数组原型方法;可用 array.prototype.slice.call() 或 array.from() 转为数组后使用 slice 等方法,后者更推荐且支持映射。

可以直接用 Array.prototype.slice.call() 或更现代的 Array.from() 将 HTMLCollection 转成真正的数组,从而使用 slice() 等数组方法。
为什么不能直接对 HTMLCollection 调用 slice?
HTMLCollection 是类数组对象(array-like),它有 length 和数字索引,但没有数组原型上的方法(如 slice、map、filter)。直接调用会报错:collection.slice is not a function。
用 slice.call() 转换(兼容老浏览器)
利用 Array.prototype.slice 的通用性,借用它处理类数组:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
const divs = document.getElementsByTagName('div');const arr = Array.prototype.slice.call(divs);- 之后就能正常使用:
arr.slice(0, 3)、arr.map(el => el.id)等
用 Array.from()(推荐,简洁且支持映射)
ES6 提供了更直观的方式,一步到位:
const divs = document.getElementsByTagName('div');const arr = Array.from(divs);- 还能边转换边处理:
const ids = Array.from(divs, el => el.id); - 也支持
slice:Array.from(divs).slice(1, 4)
其他可行方式(附带说明)
扩展运算符 [...collection] 本质也是基于 Array.from 的语法糖,效果一致:
const arr = [...document.querySelectorAll('p')];- 注意:
querySelectorAll返回的是NodeList(也可用slice,但 IE 不支持其slice方法,所以仍建议转数组) -
HTMLCollection不支持扩展运算符(IE/旧版 Safari 会报错),稳妥起见优先选Array.from
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










