2011-02-12 19 views
14

¿Hay alguna razón por la que debería usar $('#x>div').get(1) cuando podría simplemente usar $('#x>div')[1]? ¿Hay una diferencia?jQuery: matriz cero vs función obtener cero: [0] vs get (0)

+0

Este es un duplicado exacto * *, pero no tengo el enlace. –

+5

Es por eso que deletreé las palabras. Entonces sería más fácil encontrarlo más tarde con una búsqueda. Acabo de deletrear unas pocas palabras más en caso de que ayude. @pst –

Respuesta

14

No, no hay diferencia. jQuery contiene todos los nodos DOM en una matriz.

$().get(1) === $()[1]

fuente --jQuery snippet--

get: function(num) { 
    return num == null ? 
     // Return a 'clean' array 
     this.toArray() : 

     // Return just the object 
     (num < 0 ? this[ this.length + num ] : this[ num ]); 
}, 

Como se puede ver, .get() sin argumentos devolverá todos los nodos como matriz. Esto no se puede lograr con corchetes.

7

No, y el rendimiento es about the same porque la creación de un objeto jQuery domina gama/función de tiempo de acceso:

Browser  get Ops/sec array Ops/sec #tests 
Chrome 9  20,555  22,671   2 
+2

huh ... Esperaría que el método de matriz fuera ** más ** eficiente ya que no tendrías que pasar por la función. –

+1

Whoops, Oh, lo es ... Lo siento, estaba pensando en términos de milisegundos gastados, no operaciones por segundo –

+8

Su comparación queda oscurecida por el hecho de que en su prueba también está realizando una operación comparativamente pesada (creando un objeto jQuery y selección de DOM). Si elimina los de la prueba, la diferencia se muestra enorme. http://jsperf.com/get-vs-array/2 'array: 123,366,553/get: 4,062,520' Entonces, la expectativa de @ George era absolutamente correcta. – user113716