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

数组字面量([])比 Array 构造函数(new Array() 或 Array())性能更好,且更安全、更直观,日常开发中应优先使用字面量。
创建空数组时,字面量明显更快
引擎对 [] 有高度优化,V8 等现代 JS 引擎会将其编译为底层高效的内存分配指令;而 new Array() 需要走完整的构造函数调用流程,涉及原型链查找、this 绑定、甚至可能触发代理或拦截逻辑。
-
[]:直接分配固定大小的内部数组结构,无函数调用开销 -
new Array():需解析构造函数、检查参数个数、判断是否为单个数字(如new Array(5)会创建稀疏数组),额外分支多
参数行为不一致,Array() 容易引发意外
字面量语义明确:每个参数都是数组元素;Array() 构造函数则有歧义——当且仅当传入**一个数字参数**时,它会创建指定长度的空数组(非稀疏但 length 设定),其余情况才作为元素列表。
-
[1, 2, 3]→[1, 2, 3] -
Array(1, 2, 3)→[1, 2, 3] -
Array(5)→[empty × 5](length = 5,无实际元素) -
Array("5")→["5"](字符串参数不触发长度逻辑)
这种重载让代码可读性下降,也容易在动态传参时出错(例如 Array(...args) 若 args.length === 1 且值为数字,结果完全不是预期)。
立即学习“Java免费学习笔记(深入)”;
字面量支持更自然的初始化和嵌套
对象/数组混合结构、解构赋值、展开运算符等现代语法与字面量天然契合;而 Array() 在嵌套或组合使用时语法冗长、可读性差。
- 清晰:
const matrix = [[1, 2], [3, 4]]; - 繁琐且易错:
const matrix = Array(Array(1, 2), Array(3, 4));(实际会报错,因为Array(1,2)返回数组,但外层Array(...)不接受数组参数作为元素) - 展开场景:
[...arr1, ...arr2]直观;Array(...arr1, ...arr2)虽可行,但无必要地绕远路
引擎优化持续偏向字面量,未来差距可能拉大
主流引擎(V8、SpiderMonkey、JavaScriptCore)都将字面量视为“常量数据结构”,在解析阶段就完成部分推断(如类型、长度、是否稀疏);而 Array 构造函数被视为普通函数调用,优化受限。即使 JIT 编译器能内联简单调用,也无法消除语义歧义带来的保守假设。
- Benchmark(Chrome 120,小数组)显示:字面量创建速度比
Array()快 2–5 倍 - 大型项目中,高频数组创建(如渲染循环、数据转换)累积差异显著
- 压缩工具(如 Terser)也更倾向保留字面量,因其更短、更确定
不复杂但容易忽略:写 [] 和 [1, 'a', {}] 就够了,把 Array 构造函数留给极少数需要动态控制数组长度且明确知晓风险的底层场景(比如预分配缓冲区)。










