应优先使用数组字面量([]),因其性能更优、语义明确、更安全直观;Array构造函数存在参数歧义、性能开销大、可读性差等问题,仅适用于极少数预分配稀疏结构的场景。

日常开发中,数组创建频率极高,选对方式直接影响执行效率与代码可维护性。直接结论:绝大多数场景应无条件选用数组字面量([]),仅在极少数明确需要预分配稀疏结构时,才考虑 Array() 构造函数。
性能差距真实存在且可测量
现代 JS 引擎(V8、JavaScriptCore 等)对字面量做了深度优化:
-
[]和[1, 'a', {}]在解析阶段就被识别为常量结构,直接映射为高效内存分配指令 -
new Array()或Array()需走完整函数调用流程:原型链查找、this绑定、参数个数判断、类型分支处理 - Benchmark 显示,小数组创建速度,字面量比构造函数快 2–5 倍;高频场景(如渲染循环、数据批量转换)累积影响显著
行为确定性决定可维护性
构造函数的单参数歧义是隐性陷阱,字面量则始终语义统一:
-
[5]→ 含一个数字元素的数组;Array(5)→ 长度为 5 的空槽数组(length === 5,但0 in arr为false) -
Array(3.14)抛出RangeError;[3.14]安全创建含浮点数的数组 - 动态传参时风险放大:若
const args = [n],Array(...args)与Array(n)行为完全不同,而[...args]始终可靠
现代语法天然适配字面量
ES6+ 特性设计围绕字面量展开,强行混用构造函数反而增加冗余和错误可能:
- 嵌套结构:
[[1, 2], [3, 4]]清晰直观;Array(Array(1, 2), Array(3, 4))不仅冗长,且外层Array()无法正确接收数组作为元素(实际报错) - 解构与展开:
const [a, ...rest] = [...arr1, ...arr2]流畅自然;用Array()实现等效逻辑需多层包装,可读性骤降 - 压缩工具(如 Terser)更倾向保留字面量——字符更短、语义更确定、无运行时不确定性
什么情况下可谨慎考虑 Array 构造函数?
仅当同时满足以下全部条件时:
- 明确需要长度固定、初始无元素的稀疏缓冲区(如 WebGL 数据填充、预分配大数组)
- 已排除更安全的替代方案,例如:
Array.from({ length: n }, () => undefined)或new Array(n).fill(null) - 团队规范允许,并配有清晰注释说明意图(如
// pre-allocate sparse buffer for performance)


















