像这样声明一个数组的真正区别是什么:
var myArray = new Array();
and
var myArray = [];
像这样声明一个数组的真正区别是什么:
var myArray = new Array();
and
var myArray = [];
当前回答
当你初始化没有任何长度的数组时,没有区别。因此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
其他回答
有区别,但在那个例子中没有区别。
使用更详细的方法:new Array()在参数中有一个额外的选项:如果你将一个数字传递给构造函数,你将得到一个该长度的数组:
x = new Array(5);
alert(x.length); // 5
为了演示创建数组的不同方法:
var a = [], // these are the same
b = new Array(), // a and b are arrays with length 0
c = ['foo', 'bar'], // these are the same
d = new Array('foo', 'bar'), // c and d are arrays with 2 strings
// these are different:
e = [3] // e.length == 1, e[0] == 3
f = new Array(3), // f.length == 3, f[0] == undefined
;
另一个区别是,当使用new Array()时,您可以设置数组的大小,这会影响堆栈大小。如果你得到堆栈溢出(数组的性能。push vs array .unshift),当数组的大小超过堆栈的大小时,就会发生这种情况,并且必须重新创建。因此,根据用例,在使用new Array()时实际上可以提高性能,因为可以防止发生溢出。
正如在这个答案中指出的,new Array(5)实际上不会向数组中添加5个未定义的项。它只是为五个项目增加了空间。请注意,以这种方式使用Array会使依赖数组变得困难。用于计算的长度。
使用的区别
var arr = new Array(size);
Or
arr = [];
arr.length = size;
在这个问题上已经讨论得够多了。
我想添加速度问题-目前最快的方式,在谷歌chrome是第二个。
但请注意,这些东西往往会随着更新而发生很大变化。此外,不同浏览器的运行时间也不同。
例如-我提到的第二个选项,在chrome上运行200万[ops/秒],但如果你在mozilla dev上尝试,你会得到一个惊人的更高的速度2300万。
无论如何,我建议你每隔一段时间在不同的浏览器(和机器)上检查一下,使用站点本身
在使用承诺时,我发现了一个不同。在使用承诺数组(例如arr,初始化为arr=[])时,在Promise.all(arr)中得到一个错误。而当声明为arr = 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中获得原型函数
它们只是数组的不同实例。这就解释了为什么 [] != []
:)
第一个是默认的对象构造函数调用。你可以使用它的参数。
var array = new Array(5); //initialize with default length 5
第二个函数让你能够创建非空数组:
var array = [1, 2, 3]; // this array will contain numbers 1, 2, 3.