2011-02-12 13 views
14

Czy jest jakikolwiek powód, dla którego powinienem używać $('#x>div').get(1), gdybym mógł zamiast tego użyć tylko $('#x>div')[1]? Czy istnieje różnica?jQuery: array zero vs function get zero: [0] vs get (0)

+0

To * * dokładny duplikat, ale nie mam link. –

+5

Dlatego właśnie wypisałem słowa. Więc łatwiej będzie znaleźć później za pomocą wyszukiwania. Po prostu napisałem kilka dodatkowych słów na wypadek, gdyby to pomogło. @ pst –

Odpowiedz

14

Nie, nie ma różnicy. jQuery przechowuje wszystkie węzły DOM w tablicy.

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

--jQuery źródło 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 ]); 
}, 

Jak widać, .get() bez argumentów zwróci wszystkie węzły jako Array. Nie można tego zrobić za pomocą nawiasów.

7

No, a wydajność jest about the same ponieważ stworzenie obiektu jQuery dominuje tablica/dostępu: funkcja czasu

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

huh .. Spodziewałbym się, że metoda tablicy będzie ** bardziej ** efektywna, ponieważ nie będziesz musiał przechodzić przez tę funkcję. –

+1

Whoops, Oh, to jest ... Przepraszam, że myślałem w terminach milisekund spędzonych ,, nie operacji na sekundę –

+8

Twoje porównanie jest zasłonięte przez fakt, że w teście również wykonujesz stosunkowo ciężką operację (tworzenie obiektu jQuery i wybór DOM). Jeśli usuniesz je z testu, różnica będzie ogromna. http://jsperf.com/get-vs-array/2 'array: 123,366,553/get: 4,062,520' Oczekiwanie @ @'s @ było absolutnie poprawne. – user113716