如何在JavaScript中初始化数组的长度?
如何在JavaScript中初始化数组的长度?
我读过的大多数JavaScript数组教程(包括w3schools和devguru)都建议使用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;
通过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中会失败)
-
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]