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。对象中不存在从041 的属性,例如: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() 的未定义值

javaScript中数组的定义方法

js 中 new Array() var a={} var a=[] new Object()

JavaScript数组的一些奇葩行为