2012-07-30 25 views
5

thể trùng lặp:
Create an empty object in JavaScript with {} or new Object()?Cách nào tốt nhất để thực hiện theo khi khai báo một mảng trong Javascript?

Khi tôi muốn khai báo một mảng mới tôi sử dụng ký hiệu này

var arr = new Array(); 

Nhưng khi kiểm tra trực tuyến, ví dụ trên jsbin, một cảnh báo báo hiệu cho tôi "Sử dụng ký hiệu chữ cái mảng []."

Tôi không tìm thấy lý do để tránh sử dụng hàm tạo. Một cách nào đó kém hiệu quả hơn việc sử dụng []? Hoặc là thực hành xấu?

Có lý do chính đáng để sử dụng var arr = []; thay vì var arr = new Array(); không?

Trả lời

5

Chủ yếu, mọi người sử dụng var a = []Douglas Crockford nói như vậy.

lý do của ông bao gồm các hành vi phi trực quan và không phù hợp của mảng mới():

var a = new Array(5);  // an array pre-sized to 5 elements long 
var b = new Array(5, 10); // an array with two elements in it 

Lưu ý rằng không có cách nào với new Array() để tạo ra một mảng với chỉ một yếu tố số tiền quy định tại nó!

Sử dụng [] thực sự hiệu quả hơn và an toàn hơn! Có thể ghi đè lên hàm tạo mảng và làm cho nó làm những điều kỳ quặc, nhưng bạn không thể ghi đè lên hành vi của [].

Cá nhân, tôi luôn sử dụng cú pháp [] và tương tự luôn sử dụng cú pháp {} thay cho đối tượng mới().

+0

Ý của bạn là gì với * không có cách nào [...] để tạo một mảng chỉ với một phần tử số được chỉ định trước trong nó *? – KooiInc

+1

Ông có nghĩa là bạn không thể tạo một mảng [123] bằng cách sử dụng mảng mới (123) vì nó tạo ra một mảng được xác định trước của kích thước đã cho. –

0

Việc thực hành khuyến cáo là sử dụng

var arr = []; 

Đã trả lời here

+2

Người đàn ông đã yêu cầu giải thích tại sao điều đó lại tốt hơn. –

7

[] là:

    ngắn
  • rõ ràng hơn
  • không chịu new Array(3)new Array(3,3) làm những việc hoàn toàn khác nhau
  • không thể bị ghi đè. đang

Ví dụ:

var a = new Array(3); 
var b = new Array(3,3); 
Array = function() { return { length: "!" }; }; 
var c = new Array(); 
var d = []; 
alert(a.length); // 3 
alert(b.length); // 2 
alert(c.length); // ! 
alert(d.length);​ // (still) 0​​​​​​​​ 

Mã này live - sẽ cố gắng để tạo ra 4 cảnh báo!

+0

Câu trả lời hay. BTW, tôi xen vào để biết tại sao bạn nghĩ rằng mảng mới (3) và mảng mới (3,3) là mâu thuẫn? Chúng thực hiện các khởi tạo hoàn toàn khác nhau. –

+0

'[]' cũng là [nhanh hơn] (http://jsperf.com/literal-vs-constructor-array/4) trên nhiều trình duyệt. –

+0

@AshwinPrabhu - Rằng họ làm hoàn toàn khác nhau initialisations là quan điểm của tôi. Nó đòi hỏi người bảo trì phải biết rằng việc thêm đối số thứ hai sẽ thay đổi ý nghĩa của đối số đầu tiên. – Quentin

0

Trong javascript, bạn nên sử dụng chữ khi bạn có thể.

var a = []; thay vì var o = new Array();

var o = {}; thay vì var o = new Object();

Tương tự như vậy, không làm new String("abc");, new Number(1);, và vân vân.

0

JavaScript là ngôn ngữ nguyên mẫu chứ không phải ngôn ngữ cổ điển như C#. Mặc dù JavaScript không có toán tử mới trông giống C#, bạn không nên sử dụng toán tử này để tạo các đối tượng hoặc mảng mới.

//Bad way to declare objects and arrays 
var person = new Object(), 
    keys = new Array(); 

Từ khóa mới đã được thêm vào ngôn ngữ một phần để xoa dịu ngôn ngữ cổ điển, nhưng thực tế nó có xu hướng làm cho các nhà phát triển nhầm lẫn hơn giúp họ. Thay vào đó, có những cách nguyên gốc trong JavaScript để khai báo các đối tượng và mảng và bạn nên sử dụng chúng để thay thế.

Thay vì sử dụng cú pháp trước, thay vào đó bạn nên khai báo đối tượng và mảng bằng ký hiệu chữ.

//Preferred way to declare objects and arrays 
var person = {}, 
    keys = []; 

Sử dụng mẫu này bạn thực sự có nhiều sức mạnh biểu cảm bằng cách sử dụng Object Literals và cú pháp khởi tạo mảng.

//Preferred way to declare complex objects and arrays 
var person = { 
     firstName: "Elijah", 
     lastName: "Manor", 
     sayFullName: function() { 
      console.log(this.firstName + " " + 
       this.lastName); 
     } 
    }, 
    keys = ["123", "676", "242", "4e3"]; 

Thực hành tốt nhất

Bạn nên khai báo tất cả các biến của bạn sử dụng ký hiệu theo nghĩa đen của họ thay vì sử dụng các hoạt động mới. Theo cách tương tự, bạn không nên sử dụng từ khóa mới cho Boolean, Number, String hoặc Function. Tất cả những gì họ làm là tăng thêm sưng lên và làm chậm mọi thứ.

Lý do thực sự duy nhất tại sao bạn sử dụng từ khóa mới là nếu bạn đang tạo đối tượng mới và bạn muốn nó sử dụng hàm tạo mà bạn đã xác định. Để biết thêm thông tin về chủ đề này, bạn có thể xem bài viết của Douglas Crockford có tên JavaScript, We Hardly new Ya.

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