into eliminar elemento delete array actualizar javascript arrays sizzle

eliminar - replace array javascript



¿De qué sirve Array.prototype.slice.call(array, 0)? (3)

Estaba navegando por el código fuente de Sizzle y encontré esta línea de código:

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

Busqué cuál es la función, pero llegué a la conclusión de que simplemente devuelve todos los elementos de la matriz a partir del índice 0, y pone todo en la matriz, es decir, realmente no hace nada en absoluto.

¿Cuál es, por lo tanto, el uso de esta línea de código? ¿Qué me estoy perdiendo?

Editar: es la línea 863 de https://github.com/jquery/sizzle/blob/master/sizzle.js#L863 .


Como dice BoltClock, hace una copia (superficial) de una matriz. También se puede usar para copiar algo que es casi una matriz, como los arguments incorporados, que tiene una longitud y elementos pero no una matriz en su cadena de prototipos (y, por lo tanto, no tiene un método de división).


El DOM generalmente devuelve un NodeList para la mayoría de las operaciones como getElementsByTagName .

Aunque una NodeList casi se siente como una matriz, no lo es. Tiene una propiedad de length como una matriz, y un item(index) método item(index) para acceder a un objeto en el índice dado (también accesible con la notación [index] ), pero ahí es donde termina la similitud.

Entonces, para poder utilizar los maravillosos métodos de matriz sin reescribirlos todos para una NodeList , la línea anterior es útil.

Otro uso de convertirlo en una matriz es hacer la lista estática. Las listas de nodos suelen estar activas, lo que significa que si se producen cambios en el documento, el objeto NodeList se actualiza automáticamente. Eso podría causar problemas, si un objeto jQuery devuelto cambia constantemente debajo de tu nariz. Pruebe el siguiente snippet para probar la vida 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


Lo que está sucediendo aquí es que Sizzle está creando una matriz real a partir de un objeto similar a una matriz. El objeto similar a una matriz no tiene necesariamente el método slice (), por lo que el método prototipo debe invocarse directamente. makeArray() devuelve una copia de ese objeto similar a una matriz que es una matriz real, y se puede usar como tal en donde.

Consulte here para obtener más información acerca de los objetos tipo array.