本文对比了JavaScript中批量创建数组的多种方法,包括join/split、apply、Array.from、fill及for循环。通过构建长度为100000的数组测试发现,原始for循环赋值速度最快,但代码繁琐;apply和Array.from在易用性与性能间取得平衡,适合大多数开发场景。
JavaScript 批量创建数组的性能对比与最佳实践
JavaScript提供了多种批量创建数组的方式。为了评估这些方法的执行效率,本文分别采用不同手段生成一个长度为100000的数组,并确保数组元素的键与值相等。同时,定义了一个用于测量创建数组耗时操作的函数,具体实现如下:
function t(fn) {
var start = Date.now();
fn.call(this);
var end = Date.now();
return (end - start) + 'ms';
}
以下是几种常见的数组创建方式及其对应的执行时间测试结果:
使用join和split方法
使用join和split方法

该方法的性能瓶颈主要在于map操作,若移除map步骤,执行时间仅需2ms。

使用apply方法
使用apply方法

此方法利用了一个包含{ length: 100000 }属性的伪数组对象。NodeList和arguments均属于此类“类数组对象”,它们拥有length属性和索引属性,但并非真正的数组实例,因此无法直接调用数组原型上的方法。然而,apply和call机制可以处理这类对象,Array.prototype.slice(arguments)正是基于此原理实现。
将长度为100000的伪数组传递给Array构造函数,可生成一个同等长度的新数组,随后通过map进行赋值。有观点可能质疑为何不直接使用Array(100000),原因在于该方式生成的数组元素均为undefined,导致后续map遍历无法按预期工作。
使用Array.from()方法
使用Array.from()方法
这是ES6标准引入的新特性,能够直接将伪数组或可迭代对象转换为真正的数组。

测试显示,若将输入源从伪数组替换为普通数组,该方法的执行速度会有所下降。

使用Array.fill()方法
使用Array.fill()方法
首先利用Array.fill()对数组进行初始化填充,随后通过map逐个赋值完成构建。

使用for循环
使用for循环

测试结果令人惊讶,执行速度极快,甚至让人怀疑是否漏输了零。出于验证目的,尝试使用push方法进行测试。

结果显示,push方法的执行速度同样非常快。
综合比较发现,最原始的for循环直接赋值方式效率最高,其他几种方法的性能表现大致相当。
然而,for循环的代码编写相对繁琐,原本一行代码即可解决的问题,使用for循环可能需要三行代码才能完成。
因此,在对性能要求不苛刻的实际开发场景中(通常不会处理长达100000的数组),使用apply或Array.from方法更为便捷高效。
以上介绍了JavaScript中批量创建数组的几种主要方法及其性能差异,希望能对读者有所帮助。如有任何疑问,欢迎留言交流,我们将及时回复。感谢大家对本站的支持!