像这样声明一个数组的真正区别是什么:
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
其他回答
当你初始化没有任何长度的数组时,没有区别。因此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(size)几乎比Chrome中的[]快2倍,在FF和IE中也差不多(通过创建和填充数组来衡量)。只有知道数组的大致大小才重要。如果添加的项比给定的长度多,性能提升就会丧失。
更准确地说:Array(是一个不分配内存的快速常量时间操作,而[]是一个设置类型和值的线性时间操作。
使用的区别
var arr = new Array(size);
Or
arr = [];
arr.length = size;
在这个问题上已经讨论得够多了。
我想添加速度问题-目前最快的方式,在谷歌chrome是第二个。
但请注意,这些东西往往会随着更新而发生很大变化。此外,不同浏览器的运行时间也不同。
例如-我提到的第二个选项,在chrome上运行200万[ops/秒],但如果你在mozilla dev上尝试,你会得到一个惊人的更高的速度2300万。
无论如何,我建议你每隔一段时间在不同的浏览器(和机器)上检查一下,使用站点本身
我在使用[]时出现了奇怪的行为。
我们有模型“类”,字段初始化为一些值。例如:
require([
"dojo/_base/declare",
"dijit/_WidgetBase",
], function(declare, parser, ready, _WidgetBase){
declare("MyWidget", [_WidgetBase], {
field1: [],
field2: "",
function1: function(),
function2: function()
});
});
我发现当字段用[]初始化时,它将被所有Model对象共享。对其中一项进行更改会影响所有其他项。
用new Array()初始化它们时不会发生这种情况。对象的初始化也是一样({}vs new Object())
TBH我不确定这是否是我们使用的框架(Dojo)的问题
第一个是默认的对象构造函数调用。主要用于动态值。
var array = new Array(length); //initialize with default length
第二个数组用于创建静态值
var array = [red, green, blue, yellow, white]; // this array will contain values.