声明这样的数组之间的真正区别是什么:
var myArray = new Array();
和
var myArray = [];
声明这样的数组之间的真正区别是什么:
var myArray = new Array();
和
var myArray = [];
使用Array构造函数将创建一个具有所需长度的新数组,并使用未定义的值填充每个索引,将一个数组分配给一个变量将创建您为其提供信息的索引。
除了眼神之外,这还不止于此。其他大多数答案也是正确的,但是 ..
new Array(n)
n
元素重新分配空间[1, 2, 3] || []
delete
或使用[1,,3]
语法)for ..
,forEach
,map
等)这可能是在旧的版本的浏览器/浏览器的情况。
我使用[]产生了奇怪的行为。
我们有模型“类”,其字段已初始化为某个值。例如:
require([
"dojo/_base/declare",
"dijit/_WidgetBase",
], function(declare, parser, ready, _WidgetBase){
declare("MyWidget", [_WidgetBase], {
field1: [],
field2: "",
function1: function(),
function2: function()
});
});
我发现,使用字段初始化时[]
,所有Model对象都将共享它。对一个进行更改会影响所有其他更改。
使用初始化它们不会发生new Array()
。与Objects的初始化相同({}
与new相同Object()
)
TBH我不确定我们使用的框架是否有问题(Dojo)
第一个是默认的对象构造函数调用。您可以根据需要使用其参数。
var array = new Array(5); //initialize with default length 5
第二个使您能够创建非空数组:
var array = [1, 2, 3]; // this array will contain numbers 1, 2, 3.
第一个是默认的对象构造函数调用,主要用于动态值。
var array = new Array(length); //initialize with default length
创建静态值时使用第二个数组
var array = [red, green, blue, yellow, white]; // this array will contain values.
初始化没有任何长度的数组时没有区别。所以var a = []
&var b = new Array()
一样。
但是,如果您使用length这样的长度初始化数组var b = new Array(1);
,则会将数组对象的长度设置为1。因此,它等于 var b = []; b.length=1;
。
每当您执行array_object.push时,这都会成问题,它会在最后一个元素之后添加项目并增加长度。
var b = new Array(1);
b.push("hello world");
console.log(b.length); // print 2
与
var v = [];
a.push("hello world");
console.log(b.length); // print 1
使用的区别
var arr = new Array(size);
要么
arr = [];
arr.length = size;
正如已经在这个问题上讨论得足够多了。
我想补充一下速度问题- 当前最快的方法google chrome
是第二种方法。
但是请注意,这些事情会随着更新而发生很大变化。另外,不同浏览器的运行时间也不同。
例如,我提到的第二个选项在上以200万[ops / second]的速度运行chrome
,但是如果您尝试在它上运行,则将mozilla dev.
获得令人惊讶的2300万美元的更高速度。
无论如何,我建议你在一段时间检查出来,每一次,在不同的浏览器(和机器),利用网站这样
我可以从基于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视为具有数组数据类型的VARIABLE,并将test2视为具有数组功能的OBJECT,这里几乎没有什么区别。
第一个区别是,当我们调用test1时,它会不加考虑地调用变量,它只是返回存储在此变量中的值,而不管其数据类型!但是,当我们调用test2时,它将调用Array()函数,然后将其“推入”值存储在其“ Value”属性中,并且当我们警告test2时,也会发生同样的情况,它返回数组对象的“ Value”属性。
因此,当我们检查test1是否等于test2时,它们将永远不会返回true,一个是函数,另一个是变量(具有数组类型),即使它们的值相同!
为确保这一点,请尝试添加了.value的第四个警报。它将返回true。在这种情况下,我们告诉JS“不管容器的类型是功能还是变量,请比较存储在每个容器中的值,然后告诉我们您所看到的!” 正是这样。
我希望我能清楚地说出这个主意,并为我的英语不好对不起。
两者之间没有太大的区别,它们基本上是做相同的事情,但是以不同的方式来做,但是请继续阅读W3C的以下语句:
var cars = ["Saab", "Volvo","BMW"];
和
var cars = new Array("Saab", "Volvo", "BMW");
上面的两个示例完全相同。无需使用新的Array()。
为了简单起见,提高可读性和执行速度,请使用第一个(数组文字方法)。
但是同时,使用new Array
语法创建新数组被认为是不好的做法:
避免使用新的Array()
无需使用JavaScript的内置数组构造函数new Array()。
使用[]代替。
这两个不同的语句都创建了一个新的名为点的空数组:
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
在新的关键字唯一的代码复杂化。它还可能会产生一些意外的结果:
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 !!!!!
因此,基本上不认为这是最佳做法,那里也有一个细微的区别,您可以new Array(length)
像这样传递长度,这也不是推荐的方法。
有关更多信息,以下页面描述了为什么您永远不需要使用new Array()
您无需
new Object()
在JavaScript中使用。请改用对象文字{}
。同样,请勿使用new Array()
,而应使用数组文字[]
。JavaScript中的数组不能像Java中的数组那样工作,使用类似Java的语法会使您感到困惑。不要使用
new Number
,new String
或new Boolean
。这些形式产生不必要的对象包装。只需使用简单的文字即可。
还要检查注释- new Array(length)
表单没有任何用处(至少在当今的JavaScript实现中)。
奇怪的是,new Array(size)
它几乎比[]
Chrome 快2倍,而FF和IE 差不多(通过创建和填充数组来衡量)。仅当您知道数组的大致大小时才重要。如果添加的项目多于给定的长度,则性能提升将丧失。
更准确地说:Array(
是一种不分配内存的快速恒定时间操作,而wheras []
是设置类型和值的线性时间操作。
为了更好地理解[]
和new Array()
:
> []
[]
> new Array()
[]
> [] == []
false
> [] === []
false
> new Array() == new Array()
false
> new Array() === new Array()
false
> typeof ([])
"object"
> typeof (new Array())
"object"
> [] === new Array()
false
> [] == new Array()
false
以上结果来自Windows 7上的Google Chrome控制台。
正如我所知道的性差异u能找到切片(或阵列的其他funcitons)像编码1。而代码2显示ü 阵列和他的实例:
代码1:
代码2:
结论:
如您所见,
[]
并new Array()
创建了一个新的Array实例。Array.prototype
它们只是Array。的不同实例,所以这解释了为什么
[] != []
:)