2012-07-30 65 views
5

可能重複:
Create an empty object in JavaScript with {} or new Object()?在Javascript中聲明一個數組時,最好的做法是哪一個?

當我要聲明一個新的陣列我用這個符號

var arr = new Array(); 

但是網絡進行測試時,例如在jsbin,一警告信號我要「使用數組文字符號[]」。

我沒有找到避免使用構造函數的理由。在某種程度上比使用[]效率低?或者這是不好的做法?

是否有充分的理由使用var arr = [];而不是var arr = new Array();

回答

5

大多數人使用var a = [],因爲Douglas Crockford這樣說。

他的理由包括新的Array()的非直觀的,不一致的行爲:

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 

注意,沒有辦法與new Array()在它創建只是一個預先指定數量的元素的數組!

使用[]實際上更高效,也更安全!可以覆蓋Array構造函數並使其做一些奇怪的事情,但不能覆蓋[]的行爲。個人而言,我總是使用[]語法,並且類似地總是使用{}語法代替新的Object()。

+0

你的意思是什麼?沒有辦法創建一個數組,只有一個預先指定的數字元素*? – KooiInc 2012-07-30 06:48:57

+1

他意味着你不能使用新的數組(123)創建一個數組[123],因爲它創建了給定大小的預定義數組。 – 2012-07-30 07:03:05

0

建議的做法是使用

var arr = []; 

已經回答here

+2

該男子問爲什麼更好的解釋。 – 2012-07-30 06:23:43

7

[]是:

  • 更清晰
  • 不受new Array(3)new Array(3,3)做完全不同的事情
  • 不能被覆蓋。

示例代碼:

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​​​​​​​​ 

此代碼live - 將嘗試創建4個警報!

+0

很好的答案。順便說一句,我是相當於知道爲什麼你認爲新的陣列(3)和新的陣列(3,3)相沖突?他們執行完全不同的初始化。 – 2012-07-30 06:23:29

+0

'[]'在許多瀏覽器上也是[更快](http://jsperf.com/literal-vs-constructor-array/4)。 – 2012-07-30 06:23:48

+0

@AshwinPrabhu - 他們做了完全不同的初始化是我的觀點。它要求維護人員知道添加第二個參數會改變第一個參數的含義。 – Quentin 2012-07-30 06:26:08

0

在JavaScript中,您應該儘可能使用文字。

var a = [];而不是var o = new Array();

var o = {};而不是var o = new Object();

同樣,不做new String("abc");new Number(1);,等等。

0

JavaScript是一種原型語言,而不是像C#這樣的經典語言。儘管JavaScript確實有一個與C#非常類似的新操作符,但您不應該將它用於創建新對象或數組。

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

新的關鍵字加入到語言部分安撫古典語言,但在現實中,它往往會混淆開發商多幫助他們。相反,JavaScript中有本地方式來聲明對象和數組,您應該使用它們。

而不是使用以前的語法,而應該使用它們的文字表示法來聲明對象和數組。

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

使用這種模式,你實際上有很多使用Object Literals和數組初始值設定語法的表達力。

//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"]; 

最佳實踐

你應該使用自己的文字符號,而不是使用新的操作聲明所有的變量。以類似的方式,您不應該使用新的關鍵字布爾,數字,字符串或函數。他們所做的只是增加額外的膨脹並放慢速度。

爲什麼要使用new關鍵字的唯一真正原因是如果你正在創建一個新的對象,並且你希望它使用你定義的構造函數。有關此主題的更多信息,可以查看道格拉斯克羅克福德的文章JavaScript,We Hardly new Ya

相關問題