2010-05-31 76 views

回答

13

这可能是因为Array对象可以在JavaScript中被覆盖,但是数组文字符号不能。见this answer为例

+3

这取决于每个实施虽然创建阵列。至少在过去[]中,在一些JS引擎中使用了Array构造函数(iirc通过覆盖数组构造函数,对于能够为JSONP请求捕获数组创建的脚本模糊不清)。 – 2010-05-31 15:18:33

+0

@reko_t - 这是非常真实的。我知道在Firefox的数组文字不使用数组构造函数,不知道其他人(目前没有办法检查,有人可以确认吗?) – 2010-05-31 15:22:33

+0

有人能够修复链接吗? iPhone编辑比较棘手:) – 2010-05-31 15:23:27

11

还要注意的是这样做的:

var x = [5]; 

比做不同:

var x = new Array(5); 

前者创建与5的值一个元素之后的初始化数组用5个未定义元素创建一个数组。

+11

而且,为了使它更有趣,'new Array(1,2)'等于'[1,2]'。 – 2010-05-31 15:23:14

3

这是打字少,这在我的书总是赢:-)

一旦我固定在我们的页面中的一个奇怪的错误。该页面希望创建一个数字数据库键列表作为一个Javascript数组。键总是大整数(高位始终设置为指示符)。原代码看起来像:

var ids = new Array(${the.list}); 

那么,猜猜当列表中只有一个值时发生了什么?

var ids = new Array(200010123); 

这意味着,“创建一个数组并初始化它,以便有2亿空条目”。

+0

实际上是20. – BalusC 2010-05-31 15:18:33

+0

哦,无论如何 - 我无法准确地记得ID的样子,但它足够大以至于导致即时内存不足 – Pointy 2010-05-31 15:36:15

1

通常,数组文字(var a = [1,2,3]或a = [])是要走的路。

但是偶尔需要一个数组,其长度本身就是数组的定义特征。

变种A =阵列(N)将(使用文字)需要两个以下词组

变种A = [];则为a.length = N;

在任何情况下,您都不需要使用Array构造函数的'new'运算符, 并不像您需要使用新的Date对象的'new'那样。

1

要在不长

var arr = []; 

创建阵列要与长度更动态

var arr; 
(arr = []).length = 10; // 10 is array length 

要创建具有长数组动力较小

var arr = []; 
arr.length = 10;