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

14 浏览
0 Comments

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

我读过的大多数JavaScript数组教程(包括w3schoolsdevguru)都建议使用var test = new Array(4);语法,通过将一个整数传递给Array构造函数来初始化一个指定长度的数组。

在我的js文件中频繁地使用这个语法后,我通过jsLint中的一个文件运行它,结果它警告我:

Error: Problem at line 1 character 22: Expected \')\' and instead saw \'4\'.

var test = new Array(4);

Problem at line 1 character 23: Expected \';\' and instead saw \')\'.

var test = new Array(4);

Problem at line 1 character 23: Expected an identifier and instead saw \')\'.

在阅读了jsLint的行为解释后,它似乎并不喜欢new Array()语法,而是更喜欢在声明数组时使用[]

因此,我有几个问题:

首先,为什么?使用new Array()语法有什么风险?我应该注意什么浏览器不兼容问题吗?

其次,如果我切换到方括号语法,是否有一种方法可以同时声明一个数组并设置其长度,或者我必须像下面代码一样操作:

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

通过ES2015.fill(),您现在可以简单地执行以下操作:

// `n` is the size you want to initialize your array
// `0` is what the array will be filled with (can be any other value)
Array(n).fill(0)

这比Array.apply(0, new Array(n)).map(i => value)更简洁。

可以在.fill()中省略0并且不带参数运行,这将用undefined填充数组。(但是,在TypeScript中会失败)

0
0 Comments
  • Array(5)会给你一个长度为5但没有值的数组,因此你无法遍历它。

  • Array.apply(null, Array(5)).map(function () {})会给你一个长度为5且值为undefined的数组,现在可以被遍历了。

  • Array.apply(null, Array(5)).map(function (x, i) { return i; })会给你一个长度为5且值为0,1,2,3,4的数组。

  • Array(5).forEach(alert)什么也没做,Array.apply(null, Array(5)).forEach(alert)给你5个警报

  • ES6给我们Array.from,因此现在也可以使用Array.from(Array(5)).forEach(alert)

  • 如果你想用某个特定值来初始化,这些是需要知道的...
    Array.from('abcde'), Array.from('x'.repeat(5))
    或者Array.from({length: 5}, (v, i) => i) // gives [0, 1, 2, 3, 4]

0