2010-08-02 51 views
6

Tốt hơn là viếtTốt hơn là viết: var arr = []; hơn var arr = new Array() ;?

var arr=[]; then var arr=new Array(); 
var obj={}; then var obj=new Object(); 

và nếu có, tại sao?

Tôi đọc slide lection page 36 về ý tưởng đó, nhưng không có giải thích nào được đưa ra hoặc ví dụ tại sao nó tốt hơn.

+1

Câu hỏi hay! Theo quan điểm của tôi, từ quan điểm làm đẹp mã, 'new Array()' trông sạch sẽ hơn nhiều. Quan tâm để xem những gì đi lên. –

+0

Đề xuất không đề cập đến các đối tượng. –

Trả lời

6

Không có sự khác biệt lớn giữa các định nghĩa này, ngoại trừ cách đầu tiên sử dụng mảng/đối tượng theo nghĩa đen và thứ hai là hàm tạo mảng/đối tượng.

Trình tạo mảng có thể trả về các kết quả khác nhau, tùy thuộc vào số lượng đối số được truyền vào. Nếu bạn chuyển vào một đối số, một mảng trống mới sẽ được tạo theo độ dài của đối số đó. Ví dụ:

// arr1 is the same as arr2 
var arr1 = new Array(1, 2, 3, 4); 
var arr2 = [1, 2, 3, 4]; 

alert(arr1.length == arr2.length); // true 
alert(arr1[0]); // 1 
alert(arr2[0]); // 1 

Nhưng, đi qua trong một kết quả tranh luận khác nhau:

// arr3 has length 200 and is empty, while arr4 has length 1 and contains a number 
var arr3 = new Array(200); 
var arr4 = [200]; 

alert(arr3.length == arr4.length); // false 
alert(arr3[0]); // 'undefined' 
alert(arr4[0]); // 200 

Cách nhanh nhất để xác định một mảng hoặc đối tượng của khóa học là cách theo nghĩa đen, bởi vì bạn không cần gọi hàm khởi tạo trước. Dù sao, sự khác biệt tốc độ thực tế là không đáng kể, thực sự.

Tôi đã làm một speed test trong Chrome 6, trong đó tôi định nghĩa 20 lần 10000000 cùng mảng 1, 2, 3, đó đã cho những kết quả này:

Average speed per 10000000 calls 
Array Constructor : 226.55 ms 
Array Literal  : 159.1 ms 

Như bạn có thể thấy, các mảng đen nhanh 67,45ms mỗi 10.000.000 định nghĩa mảng.

+0

câu hỏi cũng ở đây nhanh hơn cho máy tính để chạy – Yosef

+0

trong khi nó là một điểm thú vị mà các nhà xây dựng 'Array' xử lý các đối số khác nhau dựa trên bao nhiêu có, tôi nghĩ rằng nó là hoàn toàn gây hiểu lầm để danh sách đó như là một sự khác biệt trong một so sánh giữa hai cách tạo mảng. '[]' không phải là một phương thức mà bạn gọi với các đối số, bất kỳ 'var a =" test "' nào là bốn đối số được truyền vào một '' "' -function. nó không là gì hơn là một cú pháp để tạo mảng, mà chỉ ngầm giao dịch với các tham số gán. –

+3

http://jsperf.com/literal-vs-constructor-array – James

1

thomas fuchs nói trong video slideshow của mình, trong phần nói "ôm lấy ngôn ngữ" trên trang 20): var arr = [] và var obj = {} là tốt hơn và nhanh hơn một chút. Tôi không chắc tại sao, nhưng dù sao, đó là một slideshow khá thú vị :)

1

Từ quan điểm lập trình điển hình, có vẻ như bạn có xu hướng sử dụng var arr = new Array(); để cung cấp cho cảm giác của instantiation đối tượng điển hình. Nhưng trong javascript thực hành thường tốt của nó để sử dụng var arr = []; Cá nhân tôi không thấy nhiều khác biệt trong việc sử dụng cả hai cách trừ một tham số được giải thích bởi Harmen.

Kiểm tra liên kết này quá - http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/

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