對於像getElementsByTagName
這樣的大多數操作,DOM通常會返回NodeList
。
雖然NodeList
幾乎感覺像一個數組,但事實並非如此。它具有像數組一樣的length
屬性,以及訪問給定索引處的對象的方法item(index)
(也可以用[index]
表示法訪問),但這就是相似性結束的地方。
因此,爲了能夠使用美妙的array methods而不用全部重寫它們的NodeList
,以上行是有用的。
將它轉換爲數組的另一種用法是使列表成爲靜態。 NodeLists通常是活的,這意味着如果發生文檔更改,NodeList對象會自動更新。這可能會導致問題,如果一個jQuery對象返回給你不斷變化在你的鼻子下。嘗試以下snippet來測試NodeLists的活躍度。
var p = document.getElementsByTagName('p');
console.log(p.length); // 2
document.body.appendChild(document.createElement('p'));
// length of p changes as document was modified
console.log(p.length); // 3
似乎有點糾結的調用'array.slice(0)'的方式,它會複製數組。但我不明白爲什麼它會以這樣一種難以穿透的方式被調用。 – spender
上下文使所有不同。數組標識符沒有引用實際的數組。 – user113716