JavaScript 中“new Array(..)”和“[..]”的区别? [复制]
Posted
技术标签:
【中文标题】JavaScript 中“new Array(..)”和“[..]”的区别? [复制]【英文标题】:Difference between "new Array(..)" and "[..]" in JavaScript? [duplicate] 【发布时间】:2011-03-30 19:56:34 【问题描述】:是
var myCars=new Array("Saab","Volvo","BMW");
和
var myCars=["Saab","Volvo","BMW"];
一模一样?
【问题讨论】:
你可以在这里得到一些答案。 ***.com/questions/931872/… 【参考方案1】:是的,它们是一样的。数组没有原始形式,因为 javascript 中的数组始终是对象。第一种表示法(new Array
构造函数语法)在 JavaScript 早期被大量使用,后者的短表示法并没有得到很好的支持。
请注意,存在一个行为差异:如果您将单个数字参数传递给 new Array
,例如 new Array(20)
,它将返回一个新数组,该数组使用从 0
到 @987654325 的元素数量预先初始化@,设置为undefined
。
【讨论】:
那有什么用?我指的是你的第二段【参考方案2】:是的,在这种情况下它们是相同的。
如果您只有一个项目,并且它是数字的,则会有所不同。这将创建一个包含单个项目的数组:
var myNumbers = [42];
但这会创建一个长度为 42 的数组:
var myNumbers = new Array(42);
【讨论】:
第二个例子实际上没有42
项目,只有它的length
将是42
。对象中不存在从0
到41
的属性,例如:new Array(42).hasOwnProperty('0'); // false
。
@CMS:是的,你是对的。 Javascript 中的数组在这方面有点特别……我调整了答案。
@Guffa,另外一件事,新的第三个例子是不对的,无论是文字符号还是Array
构造函数的使用都会生成一个带有one元素的数组,即内部[1,2,3]
数组,例如new Array([1,2,3]).length == 1
。所描述的行为只能通过 Array.apply(null, [1,2,3]);
之类的方式实现
@CMS:看起来也像Mozilla Dev Center got this one wrong:... The following code creates an array of five elements: var billingMethod = new Array(5);
@Daniel,是的,我认为这是无处不在的神话之一,呵呵【参考方案3】:
是的,他们是。但是请注意,当您将单个数字参数传递给 Array
构造函数时,您将指定数组的初始 length
,而不是第一项的值。因此:
var myCars1 = new Array(10);
... 的行为与以下数组字面量不同:
var myCars2 = [10];
...注意以下几点:
console.log(myCars1[0]); // returns undefined
console.log(myCars1.length); // returns 10
console.log(myCars2[0]); // returns 10
console.log(myCars2.length); // returns 1
这就是为什么经常建议坚持使用数组文字表示法的原因之一:var x = []
。
【讨论】:
以上是关于JavaScript 中“new Array(..)”和“[..]”的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaScript 中,myArray.length = 0 与 myArray = new Array() 有啥区别? [复制]
JavaScript 中 new Array(n).fill('apple') 的时间复杂度是多少?
JavaScript 中带有 new Array() 的未定义值