À quoi sert Array.prototype.slice.call (array, 0)?

Je naviguais simplement sur le code source de Sizzle et je rencontrais cette ligne de code:

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

J'ai cherché à savoir quelle est la fonction, mais je suis arrivé à la conclusion qu'il renvoie tous les éléments du tableau à partir de l'index 0 et met l'ensemble dans le tableau, c'est-à-dire qu'il ne fait rien du tout.

Quelle est donc l'utilisation de cette ligne de code? Qu'est-ce qui me manque?

Edit: C'est la ligne 863 de https://github.com/jquery/sizzle/blob/master/sizzle.js#L863 .

Le DOM renvoie habituellement un NodeList pour la plupart des opérations, comme getElementsByTagName .

Bien que NodeList ressemble presque à un tableau, ce n'est pas le cas. Il a une propriété de length comme un tableau, et un item(index) méthode item(index) pour accéder à un objet à l'index donné (également accessible avec la notation [index] ), mais c'est là que la similitude se termine.

Donc, pour pouvoir utiliser les merveilleuses méthodes de tableau sans les réécrire pour une NodeList , la ligne ci-dessus est utile.

Une autre utilisation de la conversion vers un tableau est de rendre la liste statique. Les NodeLists sont généralement en direct, ce qui signifie que si des modifications de document se produisent, l'objet NodeList est automatiquement mis à jour. Cela pourrait causer des problèmes, si un objet jQuery retourné à vous continuait à changer directement sous votre nez. Essayez l' extrait suivant pour tester la vivacité de 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 

Ce qui se passe ici, c'est que Sizzle crée un réseau réel hors d'un objet semblable à un tableau. L'objet en forme de tableau n'a pas nécessairement la méthode tranche (), de sorte que la méthode prototype doit être appelée directement. makeArray() renvoie une copie de cet objet semblable à un tableau qui est un tableau réel, et peut être utilisé comme tel ailleurs.

Consultez ici pour plus d'informations sur les objets similaires à des tableaux.

Comme le dit BoltClock, il fait une copie (peu profonde) d'un tableau. Il peut également être utilisé pour copier quelque chose qui est presque un tableau, tel que les arguments solidaires, qui ont une longueur et des éléments, mais pas de matrice dans sa chaîne prototype (et donc pas de méthode en tranche).