这三种创建阵列的方法有什么区别吗?

时间:2013-03-12 18:03:15

标签: javascript jquery

这三种创建阵列的方法有什么区别吗?如果没有,为什么前两种方法存在,如果它们只是更多的代码?

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"];

3 个答案:

答案 0 :(得分:5)

使用[]比使用new Array()更安全可靠。前者实际上是推荐的。这是因为可以覆盖Array的值。另外,[] is faster compared to new Array()

看看这些相关问题:

相关链接:

为了澄清“被覆盖”意味着什么,你可以这样做:

function Array() {
    alert("I am not really an array! BWAHAHAHAHAHA!");
}

现在,当您new Array();时,您会收到警报,这显然不是您想要的。

简而言之,确实没有迫切需要使用new Array(),与使用文字[]相比,它不会给你带来更多的东西。

答案 1 :(得分:1)

<强>差:

在第一种方法中,数组声明和数组初始化是分开进行的。在第二和第三种方法中,数组声明和数组初始化在单个语句中完成。第三种只是第二种方法的简写。

需要:

案例1:假设你今天没有车,但你打算在将来买一辆车。所以,

var myCars = new Array();

案例2:假设你今天拥有2辆汽车。但将来,您可能会购买/出售一辆或多辆汽车。

var myCars = new Array("BMW", "Porsche");

总而言之,如果您事先知道数据,则使用第二或第三种方法但如果您事先不知道数据,则使用第一种方法。

答案 2 :(得分:0)

对于数组,除了可读性和普通符号的非常轻微的性能优势之外,两种方法之间没有显着差异。

但是,一般建议的做法是尽可能使用普通符号来表示javascript,而不是将这些内容包装在构造函数中。因为'new Array()'和'new Object()'与[]{}生成相同,所以使用基元的构造函数实际上可能会导致问题。

例如new String()将创建一个String对象而不是一个原始字符串。这样做的缺点是无法在字符串上使用===和其他比较。

例如

 alert(new String("") === new String("")); //false alert ("" === "")
 //true

因此虽然在这种特殊情况下没有区别,但总的来说,习惯使用基本符号而不是使用内置类型的构造函数会更好。

澄清

当我说没有区别时,我的意思是在一般情况下,这些符号会产生相同的结果。 Vivin的观点非常出色,是避免这种表示法的另一个原因。