我在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;

当前回答

假设数组的长度是恒定的。在Javascript中,我们这样做:

const intialArray=新数组(指定值);

其他回答

我很惊讶,没有一个功能性的解决方案可以让你设置一行的长度。以下内容基于UndercoreJS:

var test = _.map(_.range(4), function () { return undefined; });
console.log(test.length);

由于上面提到的原因,除非我想将数组初始化为特定值,否则我会避免这样做。有趣的是,还有其他实现范围的库,包括Lo-dash和Lazy,它们可能具有不同的性能特征。

ES6引入了Array.from,它允许您从任何“类数组”或可迭代对象创建Array:

Array.from({length: 10}, (x, i) => i);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

在这种情况下,{length:10}表示“类数组”对象的最小定义:一个只定义了长度属性的空对象。

Array.from允许第二个参数映射到结果数组上。

可以使用array.length=youValue设置数组长度

所以应该是

var myArray = [];
myArray.length = yourValue;

这将把长度属性初始化为4:

var x = [,,,,];

数组构造函数有一个不明确的语法,JSLint毕竟会伤害你的感情。

此外,如果示例代码损坏,第二个var语句将引发SyntaxError。您正在设置数组测试的属性长度,因此不需要另一个变量。

就您的选择而言,array.length是唯一“干净”的选项。问题是,为什么首先需要设置大小?尝试重构代码以消除这种依赖。