应优先使用字面量[]创建数组,因其语义清晰、性能更优(快2–5倍)、与现代语法天然契合;Array构造函数存在参数歧义、维护成本高且仅在极少数预分配场景下才需考虑。

创建数组时应尽量避免依赖 Array 构造函数,它不仅语义模糊、易出错,还会带来可测量的性能损耗;日常开发中直接用字面量 [] 就够了。
构造函数存在参数歧义,容易引发逻辑错误
Array() 的行为取决于传入参数的数量和类型,这种重载设计增加了理解和维护成本:
-
Array(1, 2, 3)→[1, 2, 3](作为元素列表) -
Array(5)→[empty × 5](长度为 5 的稀疏数组,无实际元素) -
Array("5")→["5"](字符串不触发长度逻辑)
当参数来自变量时(如 Array(...args)),结果完全不可预测:若 args.length === 1 且值为数字,就会意外生成空数组,而非预期的单元素数组。
字面量更高效,引擎深度优化
V8 等现代引擎将 [] 和 [1, 'a', {}] 视为常量数据结构,在解析阶段就完成类型推断与内存布局优化:
立即学习“Java免费学习笔记(深入)”;
-
[]编译为底层高效的内存分配指令,无函数调用开销 -
new Array()需走完整构造流程:原型链查找、this绑定、参数分支判断,甚至可能触发代理拦截 - Benchmark 显示,小数组创建速度,字面量比
Array()快 2–5 倍
构造函数在嵌套与组合场景中不自然
现代语法(解构、展开、嵌套结构)与字面量天然契合,而 Array 构造函数显得冗余且易错:
- 二维数组:
[[1, 2], [3, 4]]清晰直观;Array(Array(1, 2), Array(3, 4))不仅啰嗦,还会因参数类型不匹配而报错 - 展开合并:
[...arr1, ...arr2]直接明了;Array(...arr1, ...arr2)多此一举,且无法替代字面量语义
仅极少数场景才需考虑构造函数
Array(n) 预分配固定长度数组,在特定高性能写入场景(如批量填充、避免多次扩容)中可能有微弱优势,但需满足两个前提:
- 数组大小已知且稳定
- 后续会顺序写满所有索引(否则仍是稀疏数组,访问效率反而下降)
即便如此,也建议优先用字面量配合 length 属性预设(如 const arr = []; arr.length = n;),更明确、更安全。



















