Wednesday, June 5, 2024
 Popular · Latest · Hot · Upcoming
128
rated 0 times [  129] [ 1]  / answers: 1 / hits: 20537  / 14 Years ago, mon, february 28, 2011, 12:00:00

I was just browsing Sizzle's source code and I came across this line of code:



array = Array.prototype.slice.call( array, 0 );


I looked up what the function is, but I came to the conclusion that it just returns all elements of the array starting from index 0, and puts the whole into the array, i.e. it doesn't really do anything at all.



What is therefore the use of this line of code? What am I missing?



Edit: It's line 863 from https://github.com/jquery/sizzle/blob/master/sizzle.js#L863.


More From » arrays

 Answers
9

The DOM usually returns a NodeList for most operations like getElementsByTagName.



Although a NodeList almost feels like an array, it is not. It has a length property like an array does, and a method item(index) to access an object at the given index (also accessible with the [index] notation), but that's where the similarity ends.



So to be able to use the wonderful array methods without rewriting them all for a NodeList, the above line is useful.



Another use of converting it to an array is to make the list static. NodeLists are usually live, meaning that if document changes occur, the NodeList object is automatically updated. That could cause problems, if a jQuery object returned to you kept changing right under your nose. Try the following snippet to test the liveness of 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

[#93530] Saturday, February 26, 2011, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
bradford

Total Points: 709
Total Questions: 117
Total Answers: 91

Location: Sao Tome and Principe
Member since Wed, Dec 21, 2022
1 Year ago
;