在Javascript中声明数组时应遵循哪些最佳实践?

在Javascript中声明数组时应遵循哪些最佳实践?,javascript,Javascript,当我需要声明一个新数组时,我使用这个符号 var arr = new Array(); 但是,当在线测试时,例如在上,一个警告提示我“使用数组文字符号[]” 我没有找到避免使用构造函数的理由。在某些方面比使用[]效率低吗?还是不好的做法 是否有充分的理由使用var arr=[]而不是var arr=new Array()?构造函数可以接受的参数有一个限制 在我遇到的大多数系统上,限制为2^16(2字节): 这将导致错误(参数太多…) 当使用literal[]时,您不会遇到这样的问题 如果你不关

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

var arr = new Array();
但是,当在线测试时,例如在上,一个警告提示我“使用数组文字符号[]”

我没有找到避免使用构造函数的理由。在某些方面比使用
[]
效率低吗?还是不好的做法


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

构造函数可以接受的参数有一个限制

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

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

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

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

大多数情况下,人们使用
var a=[]
是因为

他的原因包括
new Array()
的非直观和不一致行为:

请注意,使用
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=[]显示出稍好的性能而不是调用构造函数


如果需要创建具有特定大小的数组,则需要使用
x=newarray(10)将创建一个包含10个未定义插槽的数组。

这两个插槽都是正确的。但是大多数人使用
var a=[]

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

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

方法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()使用数组/对象构造函数
定义数组或对象的最快方法是文本方式,因为您不需要调用构造函数

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 = new Array(1, 2, 3, 4);

是salt吗?

一个显著的区别是,
[]
总是实例化一个新数组,而
新数组
可能是

在我的示例代码中,我将
数组
函数隐藏在文档范围的其余部分之外,但是,如果遇到这种问题,代码可能不会被很好地关闭,并且很难找到

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

对于可维护性,请使用
[]
数组文字更容易预测,因为大多数开发人员都使用它。大多数数组的使用都将使用文本,让您的代码与其他开发人员使用的代码匹配是有价值的

对于空数组,请使用
[]
var ns=[];
变量名称=['john','brian'];
如图所示,将文本用于empty和几个已知元素比数组构造函数更复杂

对于已知大小的数组,请使用
新数组(大小)
如果大小已知,那么使用数组构造函数可以显著提高性能。但是,这也意味着您必须处理已经有“未定义”填充的数组 所有这些都是价值观

如图所示

//用100个数字填充数组
var ns=新阵列(100);
对于(变量i=0;i<100;i++){
ns[i]=i;
}

这也适用于。

两者都可以。您只需在传输中保存一些字节。确实存在差异。请参阅本文:注意:如果仅覆盖数组,则会有差异。@apkd在某些浏览器上,性能差异很大。我在链接的问题上没有看到这一点。@Alnitak:您已经提到过,它不是非常直观和简洁。我放了一个jsperf来比较性能:。至少对我来说,在Ubuntu上的Chrome 20上,文本的速度是构造函数的两倍。@jAndy,.jAndy,为什么你想要一个JavaScript中有“10个空槽”的数组?实际上,您可以使用:var arr=[];arr[9]=“ω”;1.JS中的数组是完全动态的,你可以引用任何你想要的索引,它只是“未定义的”。这就像你说的那样:var arr=newarray(10);arr[23];2.数组的长度将被设置为包含任何内容的最大值,而不管其间有多少未定义的插槽。或者你可以自己设置。[]可能无法治愈癌症,但效果稍好。作为参考,在幕后,
var arr=[]在逻辑上也使用构造函数。它始终是内置的数组构造函数,而不是当前名为
array
“您不能覆盖[]的行为”的任何函数。您确定这一点吗?我认为至少在某些实现中,您可以覆盖数组构造函数以影响[],覆盖对象构造函数以影响{}。@Random832可能在较旧的浏览器中,但在ES5兼容的实现中不适用,因为规范规定,
[]
调用内部构造函数,不是数组中的任何值。构造函数当时正好有。另外:数组文字比cre快得多
// Create an array from a method's return value
var carter = "I-learn-JavaScript";
var arlene3 = carter.split("-");
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);
(function () {
    "use strict";
    var foo,
        bar;
    //don't do this, it's a bad idea
    function Array() {
        alert('foo');
    }
    foo = new Array();
    bar = [];
}());​