在 Javascript 中声明数组时应遵循的最佳实践是什么?

当我需要声明一个新数组时,我使用这个符号

var arr = new Array();

但是当在线测试时,例如在 Jsbin上,一个警告信号向我发出“使用数组文字符号[]”的信号

我没有找到避免使用构造函数的理由。在某些方面是否比使用 []效率低?还是说这是个坏习惯?

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

14163 次浏览

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

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

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

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

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

如果您不关心这么大的数组,我想您可以使用您喜欢的任何数组。

大多数情况下,人们使用 var a = []是因为 道格拉斯·克罗克福特是这么说的

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

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

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

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

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

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

如果您需要创建一个具有特定大小的 Array,那么您可以使用 x = new Array(10);来创建一个具有10个 undefined槽的 Array。

两者都只是正确的。但是大多数人使用 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("-");
  • Var arr = []使用数组/对象文本
  • Var arr = new Array ()使用 Array/object 构造函数

定义数组或对象的最快方法是文本方法,因为您不需要调用构造函数

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 array = [ 1, 2, 3, 4];

是糖

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

是盐

一个重要的区别是,[]一直都是实例化一个新的 Array,而 new Array可以是 被劫持来创造一个不同的对象

(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构造函数不是一个好主意。

对于可维护性,使用 []

正如大多数开发人员所使用的,数组字面值更容易预测。大多数数组的使用都是使用文本,让您的代码与其他开发人员使用的代码相匹配是有价值的。

对于空数组,使用 []

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

给你所示,对空元素和两个已知元素使用文本比 Array 构造函数更快。

对于已知大小的数组,使用 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;
}

这也适用于 非常小的数组