这些在javascript中定义数组的方法有啥区别? [复制]

Posted

技术标签:

【中文标题】这些在javascript中定义数组的方法有啥区别? [复制]【英文标题】:whats the difference between these methods of defining arrays in javascript? [duplicate]这些在javascript中定义数组的方法有什么区别? [复制] 【发布时间】:2011-03-21 20:46:36 【问题描述】:

可能重复:What’s the difference between “Array()” and “[]” while declaring a javascript array?

这两种在javascript中定义数组的方法有什么区别?

var arrayList = []

var arrayListAgain = new Array();

【问题讨论】:

重复? ***.com/questions/931872/… 一个漂亮,一个丑。一个是数组字面量,一个是创建一个新的 Array 对象。他们几乎做同样的事情......我从未见过new Array(countOfUndefinedElements); 的用途,但我想会有一些。 使用字面量初始化 [] 的速度要快得多;) 【参考方案1】:

它们是一样的。根据http://www.hunlock.com/blogs/Mastering_Javascript_Arrays:

当前的最佳实践避开了 Javascript 上的“新”关键字 原语。如果你想创建一个 new Array 只需使用括号 [] 之类的 这……var myArray = [];

我建议阅读该页面,它包含很多关于数组和 JS 的有用信息。

【讨论】:

【参考方案2】:

您可以使用第二个来定义一个预定义长度的数组,例如

var arrayListAgain = new Array(20);

将创建一个包含 20 个(未定义)元素的数组。

另见new Array (len)

【讨论】:

【参考方案3】:

从来没有。两者都创建了一个 Array 对象的新实例。

Douglas Crockford 在 'Javascript the good parts' 中推荐前一种方法,因为它更简洁。

【讨论】:

Crockford 也不鼓励使用 ++--,原因不明......【参考方案4】:

一个好一个坏:-)

不认真,第一种方式更短(通过线路发送的字节更少)并且它没有任何奇怪的潜在问题。但是,第二个可以正常工作。

new Array() 的奇怪之处在于:如果您将 one 数字参数传递给构造函数,则表示“初始化数组以便有给定数量的空 (@ 987654323@) 数组元素,因此length 等于给定的数字。” (实际上它必须是一个整数。)如果你传递一个非数字,或者两个或多个数字,这意味着,“初始化数组,使其内容反映这个参数列表。”

好的,现在我说有一个奇怪的部分,就是这样:如果您使用某种服务器端框架,并且您想要创建一个数值数组(整数值),例如唯一的数据库键,那么你可能会想这样做:

var keys = new Array();

(当然,这种语法是我编出来的。)现在,如果您的服务器端键列表中只有一个“id”会发生什么?

【讨论】:

是的,不要过度使用电线! .. 那么哪个好哪个坏?看来你都称赞了... 我在开玩笑说“坏”部分,但我认为第一个符号 ([]) 更可取,因为它不那么古怪。 它是一个 unsigned 整数,更准确地说,请参阅ECMAScript spec:“如果参数 len 是一个数字和 ToUint32 (len) 等于len,则新建对象的length属性设置为ToUint32(len)。如果参数 len 是 Number 并且 ToUint32(len) 不等于 len,则会出现 RangeError 异常扔了。” 是的,前几天我在 kangax 的博客上读到了这句话——完全正确。我从不使用new Array() 表单,所以我不会想太多:-)

以上是关于这些在javascript中定义数组的方法有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

声明 JavaScript 数组时,“”和“[]”有啥区别?

这两种在 JavaScript 中定义函数的方式有啥区别? [复制]

javascript函数中的()和有啥区别? [复制]

ExtJS 3:创建自定义类的两种方式:有啥区别?

var a=function和function a有啥区别

有啥方法可以在 Javascript 中删除这些引号?