小编典典

如何在 JavaScript 中初始化数组的长度?

all

我读过的大多数关于 JavaScript
数组的教程(包括w3schoolsdevguru)都建议您可以通过使用var test = new Array(4);语法将整数传递给 Array 构造函数来初始化具有特定长度的数组。

在我的 js 文件中大量使用此语法后,我通过jsLint运行其中一个文件,结果吓坏了:

错误:第 1 行字符 22 处的问题:预期为 ‘)’ 而看到的是 ‘4’。
var test = new Array(4);
第 1 行字符 23 处的问题:预期为 ‘;’ 而是看到了’)’。
var test = new Array(4);
第 1 行字符 23 处的问题:需要一个标识符,但看到的是 ‘)’。

在阅读了jsLint 对其行为的解释后,看起来 jsLint 并不真正喜欢这种new Array()语法,而是更喜欢[]在声明数组时。

所以我有几个问题:

首先,为什么?我是否会通过使用new Array()语法来冒任何风险?是否存在我应该注意的浏览器不兼容问题?

其次,如果我切换到方括号语法,有没有办法声明一个数组并在一行上设置它的长度,或者我必须做这样的事情:

var test = [];
test.length = 4;

阅读 137

收藏
2022-03-02

共1个答案

小编典典

  1. 为什么要初始化长度?理论上没有必要这样做。它甚至会导致令人困惑的行为,因为所有使用length来确定数组是否为空的测试都会报告该数组不为空。
    一些 测试表明,如果稍后填充数组,则设置大型数组的初始长度 可能 更有效,但性能增益(如果有)似乎因浏览器而异。

  2. jsLint 不喜欢new Array(),因为构造函数不明确。

    new Array(4);
    

创建一个长度为 4的空数组。但是

    new Array('4');

创建一个包含 value 的数组'4'

关于您的评论:在 JS 中,您不需要初始化数组的长度。它动态增长。您可以将长度存储在某个变量中,例如

var data = [];
var length = 5; // user defined length

for(var i = 0; i < length; i++) {
    data.push(createSomeObject());
}
2022-03-02