我读过的大多数关于 JavaScript 数组的教程(包括w3schools和devguru)都建议您可以通过使用var test = new Array(4);语法将整数传递给 Array 构造函数来初始化具有特定长度的数组。
var test = new Array(4);
在我的 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()
[]
所以我有几个问题:
首先,为什么?我是否会通过使用new Array()语法来冒任何风险?是否存在我应该注意的浏览器不兼容问题?
其次,如果我切换到方括号语法,有没有办法声明一个数组并在一行上设置它的长度,或者我必须做这样的事情:
var test = []; test.length = 4;
为什么要初始化长度?理论上没有必要这样做。它甚至会导致令人困惑的行为,因为所有使用length来确定数组是否为空的测试都会报告该数组不为空。 一些 测试表明,如果稍后填充数组,则设置大型数组的初始长度 可能 更有效,但性能增益(如果有)似乎因浏览器而异。
length
jsLint 不喜欢new Array(),因为构造函数不明确。
new Array(4);
创建一个长度为 4的空数组。但是
new Array('4');
创建一个包含 value 的数组'4'。
'4'
关于您的评论:在 JS 中,您不需要初始化数组的长度。它动态增长。您可以将长度存储在某个变量中,例如
var data = []; var length = 5; // user defined length for(var i = 0; i < length; i++) { data.push(createSomeObject()); }