除了迭代所述集合的内容并手动将每个项目推入数组之外,是否有更有效的方法将 HTMLCollection 转换为数组?
var arr = Array.prototype.slice.call( htmlCollection )
使用“本机”代码将具有相同的效果。
Edit
由于这得到了很多观点,请注意(根据 @oriol 的评论)以下更简洁的表达式是有效地相等的:
var arr = [].slice.call(htmlCollection);
但请注意@JussiR 的评论,与“详细”形式不同,它确实在此过程中创建了一个空的、未使用的且实际上不可用的数组实例。编译器对此所做的事情超出了程序员的知识范围。
Edit
自 ECMAScript 2015 (ES 6) 以来,还有数组.from http://ecma-international.org/ecma-262/8.0/#sec-array.from:
var arr = Array.from(htmlCollection);
Edit
ECMAScript 2015 还提供了扩展运算符 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax,其功能等价于Array.from
(尽管请注意Array.from
支持映射函数作为第二个参数)。
var arr = [...htmlCollection];
我已经确认上述两项都适用NodeList
.
上述方法的性能比较:http://jsben.ch/h2IFA http://jsben.ch/h2IFA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)