什么是“var links = [] .slice.apply(document.getElementsByTagName('a'));”真的吗?

时间:2012-10-26 23:04:00

标签: javascript arrays apply slice getelementsbytagname

我不明白这是如何运作的:

var links = [].slice.apply(document.getElementsByTagName('a'));

它创建一个空数组,但我没有完全得到其余部分。 sliceapply在此脚本中一起做了什么?

2 个答案:

答案 0 :(得分:2)

document.getElementsByTagName()和类似的DOM方法返回一个类似于数组的结构,一个节点列表,而不是一个真正的数组。这是将其转换为真实数组的常见技巧。它也常用于arguments特殊变量,另一种类似阵列的结构。 Array对象的slice方法通常需要一个数组,并返回一个数组,但这样你就可以传入一些技术上不是数组的东西。这是一个稍微更易读,可以说是更好的版本:

Array.prototype.slice.apply(document.getElementsByTagName('a'));

答案 1 :(得分:0)

这基本上将从getElementsByTagName检索到的nodeList对象转换为常规javascript数组,以便能够在其上使用数组方法。