数组()与新数组()

Posted

技术标签:

【中文标题】数组()与新数组()【英文标题】:Array() vs new Array() 【发布时间】:2012-01-02 14:10:32 【问题描述】:

两者有什么区别(如果有的话)

x = Array()

x = new Array()

我应该使用哪一个?

【问题讨论】:

你可能会觉得这很有趣:***.com/questions/383402/… 【参考方案1】:

我相信两者是等价的。但是,至少在 javascript 中,您应该始终使用文字语法:

x = []

但根据我在浏览器中的一些测试,Array(1, 2, 3) 给出的结果与new Array(1, 2, 3) 相同,与Array(15)new Array(15) 相同。或者只是简单的<i>new</i> Array()

【讨论】:

正确,有完全相同的。 你应该在 JavaScript 和 CoffeeScript 中都使用x = [ ],除非你出于某种原因需要预先调整数组的大小。 mu 完全正确:使用arr = new Array(n)(其中n 是一个数字)当且仅当您正在做一些性能密集型的事情并且您提前知道数组的大小时,所以所需的内存是一次性分配的(原则上)。 @minitech - 为什么“应该”? @TrevorBurnham - 没有理由相信设置长度属性会导致分配任何内存或提高性能。【参考方案2】:

spec 说:

Array 作为函数而不是构造函数调用时,它会创建并初始化一个新的 Array 对象。因此,函数调用Array(…) 等价于具有相同参数的对象创建表达式new Array(…)

【讨论】:

【参考方案3】:

您应该使用文字[]。原因在here 中列出。使用 Array() 构造函数可能会产生歧义,因为它接受 length 或元素列表:

new Array(5)   // []
new Array('5') // ['5']

[5]   // [5]
['5'] // ['5']

您可以在没有new 运算符的情况下使用Array 的原因是它在内部使用构造函数有一个常见的技巧:

function Thing()
    if (!(this instanceof Thing))
        return new Thing()
    
    // ... define object

也就是说,如果你调用Thing(),它会为你调用new Thing()

【讨论】:

其实new Array(5)[,,,,] 在 ES5 中,为了避免这个问题,你可以使用Array.of: "Array.of(7) 创建一个包含单个元素 7 的数组,而 Array(7) 创建一个空数组长度属性为 7"【参考方案4】:

一些值得一提的事实:

Array === Array.prototype.constructor //true

new Array()new Array[] 的作用相同

但是调用构造函数的结果不一定等同于创建一个新的对象实例。示例:

Foo = function()

x = Foo()   // undefined
y = new Foo // 

所以 x 和 y 可以不同。

但是如果 Object 本身是一个数组,你会得到相同的定义,如前所述。

x = Array()   // []
y = new Array // []

即使你传递一个整数(告诉长度)

x = Array(3)     // [empty × 3]
y = new Array(3) // [empty × 3]

或一个非整数(告诉内容)

x = Array(true)     // [true]
y = new Array(true) // [true]

或更多参数(讲述内容)

x = Array(1,2,3)     // [1,2,3]
y = new Array(1,2,3) // [1,2,3]

【讨论】:

关于对象文字[]Arraynew Array 相同的部分恐怕不是真的。在这里阅读更多:***.com/questions/931872/… @azrahel 您将使用上述任何表达式获得相同的空数组(如果Array 是本机),请尝试:a:new Array,b:new Array(),c:[] 不,你不会 :) 只是阅读链接或文档。使用对象字面量[] 需要一些快捷方式,并且在内部不会执行构造函数执行的某些代码。如果您不关心性能或其他极端情况问题,当然,请使用任何一个。如果你确实关心,你应该知道差异,因为有一些。所以我所说的是“是”,在每种情况下你都会得到空数组,但“不”它在结构/内部不会是相同的。 @azrahel 毫无疑问,性能可能会有所不同,但从技术上讲,它们都做同样的事情。参考:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…,developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… @Melab 1 % 是多少?

以上是关于数组()与新数组()的主要内容,如果未能解决你的问题,请参考以下文章

前端实现数组去重,如何高效快捷?

数组去重总结

数组去重总结

数组去重总结

数组去重总结

js数组去重方法集合