像这样声明一个数组的真正区别是什么:

var myArray = new Array();

and

var myArray = [];

当前回答

奇怪的是,new Array(size)几乎比Chrome中的[]快2倍,在FF和IE中也差不多(通过创建和填充数组来衡量)。只有知道数组的大致大小才重要。如果添加的项比给定的长度多,性能提升就会丧失。

更准确地说:Array(是一个不分配内存的快速常量时间操作,而[]是一个设置类型和值的线性时间操作。

其他回答

当你初始化没有任何长度的数组时,没有区别。因此var a = [] & var b = new Array()是相同的。

但是如果你初始化数组的长度像var b = new array(1);,它将数组对象的长度设置为1。所以它等价于var b = [];b.length = 1;。

当你使用array_object时,这就会有问题。按下,它在最后一个元素后添加项目并增加长度。

var b = new Array(1);
b.push("hello world");
console.log(b.length); // print 2

vs

var v = [];
a.push("hello world");
console.log(b.length); // print 1

使用Array构造函数创建一个所需长度的新数组,并将每个下标填充为undefined,将赋值给变量one的数组创建您为其提供信息的下标。

第一个是默认的对象构造函数调用。主要用于动态值。

var array = new Array(length); //initialize with default length

第二个数组用于创建静态值

var array = [red, green, blue, yellow, white]; // this array will contain values.

在使用承诺时,我发现了一个不同。在使用承诺数组(例如arr,初始化为arr=[])时,在Promise.all(arr)中得到一个错误。而当声明为arr = Array()时,没有得到编译问题。希望这能有所帮助。

我可以用更具体的方式来解释这个基于Fredrik的好例子的例子。

var test1 = [];
test1.push("value");
test1.push("value2");

var test2 = new Array();
test2.push("value");
test2.push("value2");

alert(test1);
alert(test2);
alert(test1 == test2);
alert(test1.value == test2.value);

我只是向数组中添加了另一个值,并发出了四个警告: 第一个和第二个是给我们存储在每个数组中的值,以确定这些值。他们会照样回来的! 再试试第三个,它返回false,这是因为

JS将test1视为具有数组数据类型的变量,将test2视为具有数组功能的对象,并且 这里有一些细微的区别。

第一个区别是,当我们调用test1时,它会不加思考地调用一个变量,它只返回存储在这个变量中的值,而不管它的数据类型! 但是,当我们调用test2时,它会调用Array()函数,然后将我们的“pushing”值存储在它的“Value”属性中,当我们提醒test2时也会发生同样的情况,它会返回数组对象的“Value”属性。

因此,当我们检查test1是否等于test2时,它们当然永远不会返回true,一个是函数,另一个是变量(具有数组类型),即使它们具有相同的值!

为了确保这一点,请尝试第4个警告,并将.value添加到它;它将返回true。在这种情况下,我们告诉JS“不管容器的类型是函数还是变量,请比较存储在每个容器中的值,并告诉我们你看到了什么!”这就是所发生的事情。

我希望我已经说得很清楚了,抱歉我的英语不好。