Many JavaScript libraries like jQuery and Zepto frequently use Array.prototype.slice.call on querySelectorAll(), getElementsByTag, or ClassName results. Despite browsing numerous questions and answers on StackOverflow about this topic, I understand that it's to convert a NodeList result into an actual Array for utilizing Array methods like slice and pop, which are not directly available on NodeLists. However, what puzzles me is why it's necessary. Are slice and pop really needed when working with lists of DOM nodes? After all, NodeLists already have a length property for traversal.
Some responses suggest that the reason lies in NodeList pointing to live DOM objects. But even after conversion to an Array, the references still point to live DOM nodes, so what changes?
Is there something crucial that escapes my understanding? Could converting NodeLists to Arrays somehow enhance caching multiple property calls for DOM elements in Zepto/jQuery, despite them retaining live DOM references?