2015-03-25 12 views
5

W3 Schools saysTại sao sử dụng "mới" để tạo một mảng Javascript được coi là xấu?

Hai báo cáo khác nhau cả hai tạo ra một mảng mới có chứa 6 số:

var points = new Array(40, 100, 1, 5, 25, 10) // Bad 
var points =[40, 100, 1, 5, 25, 10];   // Good 

nhưng không đưa ra một lời giải thích lý do tại sao người đầu tiên là xấu.

Từ những gì tôi hiểu, khác biệt duy nhất là lệnh đầu tiên gọi hàm tạo. Ai đó có thể cho tôi biết lý do tại sao người đầu tiên là xấu?

+1

Bạn đọc sách ở đâu xấu? – im1dermike

+2

Các trường W3 có rất nhiều thông tin sai và không chính xác. Bạn nên nghĩa đen không bao giờ đến đó. – djechlin

+0

W3Schools thực sự là một tài nguyên xấu, nhưng nó là đúng trong trường hợp này. –

Trả lời

17

Lý do thực sự là hàm tạo này không nhất quán.

var points = new Array(40) 

tạo ra một mảng có kích thước 40 và không có nội dung trong khi

var points = new Array(40, 50) 

tạo ra một mảng có kích thước 2 với 2 yếu tố.

Nó chỉ đơn giản hơn và dễ đọc hơn để sử dụng

var points = [40]; 

hoặc

var points = [40, 50]; 

Ngoài ra còn có lý do để sử dụng constructor này khi bạn muốn xây dựng một mảng, chỉ cần sử dụng một mảng đen, chính xác giống như bạn đang sử dụng các chữ số.

Chỉ sử dụng hàm tạo Array khi bạn muốn tạo một mảng trống có kích thước cụ thể (rất hiếm khi xảy ra).

ES 2015 chỉnh sửa:

Do mâu thuẫn này, ES2015 mang lại cho chúng một hàm tĩnh mới, Array.of. Array.of(40) tạo mảng [40].

+0

Bạn có thể đề cập rằng chiều dài mảng cũng có thể được đặt sau khi tạo một mảng trống. Ví dụ 'var a = []; a.length = 50; '. – soyuka

+0

Vâng ... vâng, nhưng tại sao bạn lại viết nó? Tôi muốn sử dụng 'new Array (50)' trong trường hợp cụ thể này. –

+0

Ví dụ đầu tiên tôi có thể nghĩ đến, sẽ là tạo một 'bản sao' của một mảng hiện có để so sánh. [Sử dụng trường hợp tại đây] (https://gist.github.com/soyuka/950371df21c0947535f3#file-concurrency-js-L11). Nó cũng là một cách để có hành vi tương tự như 'mảng mới (chiều dài)'. – soyuka

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