在Javascript中声明数组时要遵循的最佳做法是什么?

时间:2012-07-16 08:21:05

标签: javascript

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

var arr = new Array();

但是当在线测试时,例如在jsbin上,警告我“使用数组文字符号[]。”

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

是否有充分理由使用var arr = [];代替var arr = new Array();

9 个答案:

答案 0 :(得分:257)

主要是,人们使用var a = []因为Douglas Crockford says so

他的理由包括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()无法创建一个只包含一个预先指定的数字元素的数组!

使用[]实际上效率更高,and safer too!可以覆盖Array构造函数并使其执行奇怪的操作,但不能覆盖[]的行为。

就个人而言,我总是使用[]语法,同样总是使用{}语法代替new Object()

答案 1 :(得分:48)

一个显着的区别是[] 总是实例化一个新数组,而new Array可能是hijacked to create a different object

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

在我的示例代码中,我保持Array函数对文档范围的其余部分隐藏,但是如果遇到这类问题则更可能是代码不会留下一个很好的封闭,很可能很难找到。

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

答案 2 :(得分:26)

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

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

表示空数组,请使用[]

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

如图here所示,使用文字为空和几个已知元素比数组构造函数更快。

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

如果已知大小,那么使用Array构造函数可以显着提高性能。但是,这也意味着你必须处理已经有'undefined'填充的数组 它的全部价值。

如图所示here

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

这也适用于very small arrays too

答案 3 :(得分:12)

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

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

如果您需要创建具有特定大小的数组,那么您需要 来使用x = new Array(10);,这将创建一个包含10个undefined个插槽的数组。

答案 4 :(得分:7)

  • 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

答案 5 :(得分:6)

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

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

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

// 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还允许您通过调用特定方法间接创建数组。

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

答案 6 :(得分:4)

构造函数可以将其作为参数进行限制。

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

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

这将导致错误(参数太多......)

使用文字[]时,你不会遇到这样的问题。

如果您不关心这些大型数组,我认为您可以使用您喜欢的任何内容。

答案 7 :(得分:4)

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

是糖

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

是盐

答案 8 :(得分:3)

这是因为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)