3 回答

TA贡献1820条经验 获得超9个赞
为什么要初始化长度?从理论上讲,没有必要这样做。它甚至可能导致令人困惑的行为,因为所有使用它
length
来查明数组是否为空的测试都会报告该数组不为空。
一些 测试表明,如果之后填充数组,设置大型数组的初始长度可以更有效,但性能增益(如果有的话)似乎因浏览器而异。jsLint不喜欢
new Array()
因为构造函数不明确。new Array(4);
创建一个长度为 4 的空数组。但是
new Array('4');
创建一个包含该值 的数组
'4'
。
关于你的评论:在JS中,你不需要初始化数组的长度。它动态增长。您可以将长度存储在某个变量中,例如
var data = [];var length = 5; // user defined lengthfor(var i = 0; i < length; i++) { data.push(createSomeObject());}

TA贡献1818条经验 获得超11个赞
Array(5)
给你一个长度为5但没有值的数组,因此你不能迭代它。Array.apply(null, Array(5)).map(function () {})
给你一个长度为5且未定义为值的数组,现在它可以迭代。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]

TA贡献1872条经验 获得超3个赞
使用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)
可以0
放入in .fill()
并运行不带参数,这将填充数组undefined
。(但是,这将在Typescript中失败)
添加回答
举报