2011-02-12 35 views
14

Có lý do nào tôi nên sử dụng $('#x>div').get(1) khi tôi có thể thay vì chỉ sử dụng $('#x>div')[1]? Có sự khác biệt nào không?jQuery: mảng zero vs hàm nhận số không: [0] so với get (0)

+0

Đây là một * chính xác * trùng lặp, nhưng tôi không có liên kết. –

+5

Đó là lý do tại sao tôi viết ra các từ. Vì vậy, nó sẽ dễ dàng hơn để tìm kiếm sau này với một tìm kiếm. Chỉ cần nói thêm một vài từ trong trường hợp nó giúp. @pst –

Trả lời

14

Không, không có sự khác biệt. jQuery giữ tất cả các nút DOM trong một mảng.

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

--jQuery nguồn 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 ]); 
}, 

Như bạn thấy, .get() không có đối số sẽ trở lại tất cả các nút như Array. Điều này không thể được thực hiện với dấu ngoặc đơn.

7

Không, và hiệu suất là about the same vì việc tạo ra một đối tượng jQuery thống trị mảng/chức năng thời gian truy cập:

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

huh .. Tôi hy vọng phương thức mảng sẽ ** hiệu quả hơn ** vì bạn sẽ không phải thực hiện chức năng này. –

+1

Rất tiếc, Oh, nó là .. Xin lỗi tôi đã suy nghĩ về số phần nghìn giây, không hoạt động mỗi giây –

+8

So sánh của bạn bị che khuất bởi thực tế là trong thử nghiệm của bạn, bạn cũng đang làm một hoạt động tương đối nặng (tạo đối tượng jQuery và lựa chọn DOM). Nếu bạn loại bỏ chúng khỏi thử nghiệm, sự khác biệt được hiển thị là rất lớn. http://jsperf.com/get-vs-array/2 'mảng: 123,366,553/get: 4,062,520' Vì vậy, kỳ vọng của @ George là hoàn toàn chính xác. – user113716

Các vấn đề liên quan