像这样声明一个数组的真正区别是什么:
var myArray = new Array();
and
var myArray = [];
像这样声明一个数组的真正区别是什么:
var myArray = new Array();
and
var myArray = [];
当前回答
在使用承诺时,我发现了一个不同。在使用承诺数组(例如arr,初始化为arr=[])时,在Promise.all(arr)中得到一个错误。而当声明为arr = Array()时,没有得到编译问题。希望这能有所帮助。
其他回答
第一个是默认的对象构造函数调用。你可以使用它的参数。
var array = new Array(5); //initialize with default length 5
第二个函数让你能够创建非空数组:
var array = [1, 2, 3]; // this array will contain numbers 1, 2, 3.
当你初始化没有任何长度的数组时,没有区别。因此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
使用的区别
var arr = new Array(size);
Or
arr = [];
arr.length = size;
在这个问题上已经讨论得够多了。
我想添加速度问题-目前最快的方式,在谷歌chrome是第二个。
但请注意,这些东西往往会随着更新而发生很大变化。此外,不同浏览器的运行时间也不同。
例如-我提到的第二个选项,在chrome上运行200万[ops/秒],但如果你在mozilla dev上尝试,你会得到一个惊人的更高的速度2300万。
无论如何,我建议你每隔一段时间在不同的浏览器(和机器)上检查一下,使用站点本身
没有太大的区别,它们基本上做同样的事情,但以不同的方式来做,但是继续读下去,看看W3C的这个声明:
var cars = ["Saab", "Volvo","BMW"];
and
var cars = new Array("Saab", "Volvo", "BMW");
上面的两个例子完全相同。没有使用的必要 新数组()。为简化性、可读性和执行速度,请使用 第一个(数组字面量方法)。
但同时,使用新的array语法创建新数组被认为是一种糟糕的做法:
避免使用新数组() 不需要使用JavaScript内置的数组构造函数 新数组()。 请使用[]。 这两个不同的语句都创建了一个名为 点:
var points = new Array(); // Bad
var points = []; // Good
这两个不同的语句都创建了一个包含6的新数组 数字:
var points = new Array(40, 100, 1, 5, 25, 10); // Bad
var points = [40, 100, 1, 5, 25, 10]; // Good
new关键字只会使代码复杂化。它也能产生一些 意想不到的结果:
var points = new Array(40, 100); // Creates an array with two elements (40 and 100)
如果我去掉其中一个元素呢?
var points = new Array(40); // Creates an array with 40 undefined elements !!!!!
所以基本上不被认为是最佳实践,这里还有一个小区别,你可以像这样传递length到new Array(length),这也是不推荐的方式。
我可以用更具体的方式来解释这个基于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“不管容器的类型是函数还是变量,请比较存储在每个容器中的值,并告诉我们你看到了什么!”这就是所发生的事情。
我希望我已经说得很清楚了,抱歉我的英语不好。