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

var myArray = new Array();

and

var myArray = [];

当前回答

我可以用更具体的方式来解释这个基于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“不管容器的类型是函数还是变量,请比较存储在每个容器中的值,并告诉我们你看到了什么!”这就是所发生的事情。

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

其他回答

有关更多信息,下面的页面描述了为什么永远不需要使用new Array()

你永远不需要使用new Object()在 JavaScript。使用对象文字{} 代替。同样,不要使用new Array(), 使用数组文字[] 代替。JavaScript中的数组可以工作 不像Java中的数组,而且 使用类似java的语法 迷惑你。 不使用新数字,新字符串,或 新布尔。这些形式产生 不必要的对象包装。只使用 而是简单的字面量。

还要查看注释——新的Array(length)表单没有任何有用的用途(至少在今天的JavaScript实现中)。

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

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

正如我所知道的区别,你可以找到切片(或数组的其他函数),如code1。和代码2显示u数组和他的实例:

code1:

[].slice; // find slice here
var arr = new Array();
arr.slice // find slice here
Array.prototype.slice // find slice here

code2:

[].__proto__ == Array.prototype; // true
var arr = new Array();
arr.__proto__ == Array.prototype; // true

结论:

如你所见[]和new Array()创建一个Array的新实例。它们都从array。prototype中获得原型函数

它们只是数组的不同实例。这就解释了为什么 [] != []

:)

事情远比看上去的复杂。大多数其他答案是正确的,但也…

新数组(n)

允许引擎为n个元素重新分配空间 为创建数组而优化 创建的数组被标记为稀疏数组具有最少的性能数组操作,这是因为每个索引访问都必须检查边界,查看是否存在值并遍历原型链 如果数组被标记为稀疏,就没有办法返回(至少在V8中),它在生命周期内总是会变慢,即使你在1毫秒或2小时后用内容填充它(打包的数组)也没关系

[1, 2, 3] | | []

创建的数组被标记为已打包(除非使用delete或[1,,3]语法) 针对数组操作进行了优化(用于.., forEach, map等) 随着数组的增长,引擎需要重新分配空间

对于旧版本的浏览器可能不是这样。

使用的区别

var arr = new Array(size);

Or

arr = [];
arr.length = size;

在这个问题上已经讨论得够多了。

我想添加速度问题-目前最快的方式,在谷歌chrome是第二个。

但请注意,这些东西往往会随着更新而发生很大变化。此外,不同浏览器的运行时间也不同。

例如-我提到的第二个选项,在chrome上运行200万[ops/秒],但如果你在mozilla dev上尝试,你会得到一个惊人的更高的速度2300万。

无论如何,我建议你每隔一段时间在不同的浏览器(和机器)上检查一下,使用站点本身