2016-01-11 20 views
14

Như tiêu đề, tôi tự hỏi sự khác biệt giữa 3 phương pháp khởi tạo một mảng.Sự khác nhau giữa Array.of (n), Array (n) và mảng = [n] là gì?

Tôi thực sự quan tâm hơn đến phương thức Array.of() mới được cung cấp từ ES6, tại sao họ cảm thấy nhu cầu thực hiện điều đó?

+0

tôi đã nhìn thấy nó, có lẽ câu hỏi của tôi là không rõ ràng tôi đang tìm kiếm một phần giải thích thực tế của usecases thay vì một tài liệu đơn giản cắt & dán. @AmmarCSE cảm ơn bạn vì nó anyway –

Trả lời

21

Các nhà xây dựng Mảng có thể được gọi bằng hai cách: một danh sách các giá trị được sử dụng như giá trị cho các phần tử mảng, hoặc với một giá trị số đơn cho chiều dài ban đầu:

var myArray = new Array("hello", "world"); // 2 elements 
var otherArray = new Array(100); // 100 elements, all empty 

Bởi vì có một sự nhập nhằng khi chỉ một số được chuyển, API cũ được coi là thiết kế kém. Như vậy, có Array.of(), mà là giống như các tùy chọn đầu tiên cho các nhà xây dựng Array:

var otherArray = Array.of(100); // 1 element 

Cách thứ ba để làm cho một mảng là với một biểu thức mảng khởi tạo:

var otherArray = [100]; // 1 element 

Các trường hợp mảng được tạo ra bởi mỗi trong số trên là tương đương về chức năng và hoàn toàn có thể hoán đổi cho nhau.

Một điều nữa: tại sao Array.of() phải tồn tại, với điều kiện chúng ta có thể sử dụng biểu thức khởi tạo mảng? Vâng, Array.of() là một hàm, vì vậy nó có thể được sử dụng như một giá trị được áp dụng trong lập trình kiểu hàm. Bạn có thể (như là một ví dụ hơi ngớ ngẩn) sao chép một mảng với:

var copy = Array.of.apply(Array, original); 

Một lý do đó là câm là có cũng (trong ES2015) Array.from() để làm điều tương tự:

var copy = Array.from(original); 

đó làm việc trên bất kỳ loại bản gốc có thể lặp lại nào, do đó, đây là cách tốt để biến arguments hoặc một NodeList thành một mảng.

MDN site có tài liệu về Array.of(). Hàm khởi tạo và biểu mẫu khởi tạo mảng đã tồn tại từ rất lâu, do đó, bất kỳ tham chiếu JavaScript nào sẽ bao gồm các tham số đó (mặc dù có thể không tham chiếu đến Array.of()).

+1

@thefourtheye oh shoot bạn right :) Tôi phải làm điều đó bằng cách tạo một phiên bản ràng buộc của '.apply()' (thành '.of') và sau đó liên kết nó với' Mảng và đó là một chút quá kỳ lạ đối với một ví dụ vô nghĩa. – Pointy

+0

chúng tôi thậm chí có thể thêm một số liên kết tham chiếu đến câu trả lời của bạn để làm cho nó hoàn chỉnh hơn. Một cái gì đó như [this] (https://gist.github.com/rwaldron/1074126) có vẻ hữu ích @Pointy –

+0

Ý tưởng hay. Cũng đáng chú ý là hiện tại InternetExplorer không hỗ trợ các phương thức ES2015 mới. – Pointy

3

Array.of(2) sẽ tạo ra một mảng với các phần tử 2.

var temp = Array.of(2); // temp = [2] 

Array(2) sẽ tạo ra một mảng của 2 yếu tố này.

var temp = new Array(2); // temp = [undefined, undefined] 

temp = [2] sẽ tạo ra một mảng với các phần tử 2.

var temp = [2]; // temp = [2] 
Các vấn đề liên quan