这三种创建数组的方式有什么区别吗?如果不是,如果前两种方法只是更多的代码,为什么还要存在呢?
1:
var myCars=new Array();
myCars[0]="Saab";
myCars[1]="Volvo";
myCars[2]="BMW";
2:
var myCars=new Array("Saab","Volvo","BMW");
3:
var myCars=["Saab","Volvo","BMW"];
这三种创建数组的方式有什么区别吗?如果不是,如果前两种方法只是更多的代码,为什么还要存在呢?
1:
var myCars=new Array();
myCars[0]="Saab";
myCars[1]="Volvo";
myCars[2]="BMW";
2:
var myCars=new Array("Saab","Volvo","BMW");
3:
var myCars=["Saab","Volvo","BMW"];
使用[]
比使用更安全可靠new Array()
。前者实际上是推荐的。这是因为 的值Array
可以被覆盖。此外,[]
与 相比,速度更快new Array()
。
看看这些相关的问题:
相关链接:
为了阐明“覆盖”的含义,您可以执行以下操作:
function Array() {
alert("I am not really an array! BWAHAHAHAHAHA!");
}
现在,当您这样做时,new Array();
您会收到警报,这显然不是您想要的。
简而言之,确实没有迫切需要使用new Array()
,与使用文字相比,它不会给你带来任何好处[]
。
区别:
在第一种方法中,数组声明和数组初始化是分开完成的。在第 2 和第 3 方法中,数组声明和数组初始化在单个语句中完成。3rd 只是 2nd 方法的简写。
需要:
案例1:假设你今天没有车,但你打算将来买一辆。所以,
var myCars = new Array();
案例 2:假设您今天拥有 2 辆汽车。但是将来,您可能会购买/出售一辆或多辆汽车。
var myCars = new Array("BMW", "Porsche");
总而言之,如果您事先知道数据,则使用第 2 或第 3 方法,但如果您事先不知道数据,则使用第 1 方法。
对于数组,这两种方法之间没有显着差异,除了可读性和简单表示法的非常轻微的性能优势。
然而,一般推荐的做法是尽可能对 javascript 使用普通表示法,而不是将这些东西包装在构造函数中。因为虽然 'new Array()' 和 'new Object()' 产生与[]
and相同的结果{}
,但对原语使用构造函数实际上会导致问题。
例如new String()
,将创建一个 String 对象而不是原始字符串。这具有阻止对===
字符串使用和其他比较的缺点。
例如
alert(new String("") === new String("")); //false alert ("" === "")
//true
因此,虽然在这种特殊情况下没有区别,但通常最好养成使用基本符号的习惯,而不是使用内置类型的构造函数。
当我说没有区别时,我的意思是在一般情况下,这些符号会产生相同的结果。Vivin 的观点非常出色,也是避免使用这种符号的另一个原因。