在Javascript中声明数组时,最好的做法是什么?

当我需要声明一个新的数组时,我使用这个表示法

var arr = new Array(); 

但是当在线testing时,例如在jsbin上 ,一个警告会告诉我“使用数组文字符号[]”。

我没有find一个避免使用构造函数的理由。 在某种程度上比使用[]吗? 或者这是不好的做法?

有没有很好的理由使用var arr = []; 而不是var arr = new Array();

大多数人使用var a = []因为Douglas Crockford这样说 。

他的原因包括new 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()无法创build一个只有一个预先指定的数字元素的数组!

使用[]实际上更高效, 也更安全 ! 可以覆盖Array构造函数,使其做一些奇怪的事情,但不能覆盖[]的行为。

就个人而言,我总是使用[]语法,并且类似地总是使用{}语法来代替new Object()

一个显着的区别是[]总是实例化一个新的数组,而new Array可能被劫持创build一个不同的对象 。

 (function () { "use strict"; var foo, bar; //don't do this, it's a bad idea function Array() { alert('foo'); } foo = new Array(); bar = []; }());​ 

在我的示例代码中,我已经将Array函数隐藏在文档范围的其余部分,但更有可能的是,如果遇到这种问题,代码不会留在一个很好的closures中,将可能很难find。

免责声明 :劫持Array构造函数不是一个好主意。

为了可维护性,请使用[]

数组文字是更可预测的,因为大多数开发人员使用它。 大部分的数组用法都会使用文字,并且使代码与其他开发人员使用的代码相匹配是有价值的。

对于空数组,使用[]

 var ns = []; var names = [ 'john', 'brian' ]; 

如此处所示,对于empty和一些已知元素,使用literal是比数组构造函数更快的string。

对于已知大小的数组,请使用new Array(size)

如果大小已知,那么使用Array构造函数可以显着提高性能。 然而,这也意味着你必须处理一个已经有'未定义'的数组来填充它的所有值。

如图所示

 // fill an array with 100 numbers var ns = new Array( 100 ); for ( var i = 0; i < 100; i++ ) { ns[i] = i; } 

这也适用于非常小的arrays 。

不,实际上没有理由使用一个符号而不是另一个符号来表示空的数组。

但是,大多数浏览器使用x = [];显示稍好的性能x = []; 比调用构造函数

如果你需要创build一个特定大小的数组,你需要使用x = new Array(10); 例如,这将创build一个数组10个undefined插槽。

  • var arr = []使用数组/对象字面值
  • var arr = new Array()使用数组/对象构造函数

定义一个数组或对象的最快速的方法是字面的方式,因为你不需要调用构造函数

 var arr1 = new Array(1, 2, 3, 4); var arr2 = [1, 2, 3, 4]; alert(arr1[0]); // 1 alert(arr2[0]); // 1 var arr3 = new Array(200); var arr4 = [200]; alert(arr3[0]); // 'undefined' alert(arr4[0]); // 200 

两者都是正确的。 但是大多数人使用var a = []

三种在JavaScript中声明数组的方法。

方法1 :我们可以用JavaScript“new”关键字显式声明一个数组来实例化内存中的数组(即创build它,并使其可用)。

 // Declare an array (using the array constructor) var arlene1 = new Array(); var arlene2 = new Array("First element", "Second", "Last"); 

方法2 :我们使用另一种方法来声明数组。

 // Declare an array (using literal notation) var arlene1 = []; var arlene2 = ["First element", "Second", "Last"]; 

方法3 :JavaScript也允许你通过调用特定的方法来间接创build数组。

 // Create an array from a method's return value var carter = "I-learn-JavaScript"; var arlene3 = carter.split("-"); 

构造函数可以作为参数有一个限制。

在我遇到的大多数系统上,极限是2 ^ 16(2个字节):

 var myFreshArr = new Array(0,1,2,3 ..... 65536); 

这将导致一个错误(太多的论点….)

当使用文字[]你没有这样的问题。

如果你不关心这样的大arrays,我想你可以使用任何你喜欢的。

 var array = [ 1, 2, 3, 4]; 

是糖

 var array = new Array(1, 2, 3, 4); 

是盐

这是因为new Array()是不明确的。 这些是正确的构造函数:

 // Using brackets [element0, element1, ..., elementN] // Using new AND a list of elements new Array(element0, element1, ..., elementN) // Using new AND an integer specifying the array length new Array(arrayLength)