Estaba estudiando la fuente jQuery cuando encontré esto (v1.5 línea 2295):
namespace = new RegExp("(^|\\.)" + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); Mi pregunta es, ¿por qué usar slice(0) aquí?
sort() modifica la matriz a la que se llama, y no es muy bueno andar mutando cosas en las que otro código podría depender.
slice() siempre devuelve una nueva matriz: la matriz devuelta por slice(0) es idéntica a la entrada, lo que básicamente significa que es una forma económica de duplicar una matriz.
arr.slice(0) hace una copia de la matriz original tomando una porción del elemento en el índice 0 hasta el último elemento.
También se usó para convertir objetos similares a matrices en matrices. Por ejemplo, una lista de NodeList DOM (devuelta por varios métodos DOM como getElementsByTagName ) no es una matriz, pero es un objeto similar a una matriz con un campo de length y es indexable en JavaScript. Para convertirlo en una matriz, a menudo se usa:
var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0) Ahora, la sintaxis extendida de ES2015 se usa para convertir objetos iterables, incluidos NodeList y HTMLCollection , en matrices:
const anchorArray = [...document.getElementsByTagName('a')]slice(0) crea una nueva matriz idéntica a la matriz original. Muchas veces desea conservar su matriz original y crear una nueva.
Si usa slice(1) , creará una matriz diferente a partir de la posición de índice 1.
Cosas similares valen para las cuerdas también.