我在JavaScript中读到的大多数关于数组的教程(包括w3schools和devguru)都建议,通过使用vartest=newArray(4)将整数传递给array构造函数,可以初始化具有一定长度的数组;语法。
在我的js文件中大量使用了这种语法后,我通过jsLint运行了其中一个文件,结果发现:
错误:第1行第22个字符出现问题:应为“)”,但看到的却是“4”。var test=新阵列(4);第1行第23个字符出现问题:应为“;”而是看到“)”。var test=新阵列(4);第1行第23个字符出现问题:应为标识符,但看到的却是“)”。
在阅读了jsLint对其行为的解释之后,jsLint似乎并不真正喜欢新的Array()语法,而是在声明数组时更喜欢[]。
所以我有几个问题:
首先,为什么?改用新的Array()语法是否会有风险?我是否应该注意到浏览器不兼容?
第二,如果我切换到方括号语法,是否有任何方法声明数组并将其长度全部设置在一行上,或者我必须这样做:
var test = [];
test.length = 4;
除了其他人的答案之外,另一个聪明的方法是使用Float32Array创建一个数组并对其进行迭代。
为此,从Float32Array创建一个具有所需长度的实例,如下所示:
new Float32Array(5)
此代码返回一个数组,您可以使用array.from()将其转换为数组:
Array.from(new Float32Array(5)) // [0, 0, 0, 0, 0]
您还可以使用fill()更改项的值:
Array.from(new Float32Array(5).fill(2)) // [2, 2, 2, 2, 2]
当然,您可以对其进行迭代:
Array.from(new Float32Array(5)).map(item => /* ... */ )
您不应该使用新阵列的原因如下:
var Array = function () {};
var x = new Array(4);
alert(x.length); // undefined...
其他一些代码可能会干扰Array变量。我知道任何人都会写这样的代码有点牵强,但是。。。
此外,正如Felix King所说,界面有点不一致,可能会导致一些非常难以追踪的bug。
如果您想要一个长度=x的数组,并填充未定义的(就像新的array(x)那样),您可以这样做:
var x = 4;
var myArray = [];
myArray[x - 1] = undefined;
alert(myArray.length); // 4