数组字面量初始化是javascript中最常用、最高效的方式,直接使用[]创建数组语法简洁、语义明确、性能更优,且避免了new array()在单参数时的歧义和稀疏数组陷阱。

数组字面量初始化是 JavaScript 中最常用、最高效的方式,它直接、清晰、无歧义,且执行性能优于构造函数方式。
字面量初始化:简洁可靠
使用 [] 创建数组是最推荐的做法。它语法直观,语义明确,无论空数组还是带初始值的数组,都一目了然:
-
空数组:
const arr = []; -
含元素数组:
const nums = [1, 2, 3];、const mixed = ["a", true, {x: 1}]; - 支持任意类型混合、嵌套(如二维数组
[[1,2], [3,4]]),无需额外转换
构造函数方式的风险与陷阱
new Array() 在语义上容易引发混淆,尤其当传入单个数字参数时:
-
new Array(1, 2, 3)→ 等价于[1, 2, 3](正常) -
new Array(5)→ 创建长度为 5 的稀疏数组[undefined, undefined, undefined, undefined, undefined],但每个位置实际未赋值(不是null,也不是0) -
new Array("5")→ 创建["5"](字符串参数不触发长度解释)
这种行为差异在动态传参场景下极易出错,比如 new Array(len) 本意是预分配,但若 len 来自用户输入或计算结果,一旦为非整数或负数,会直接抛错。
性能差异的关键原因
字面量初始化在解析阶段就被引擎识别为常量结构,V8 等现代引擎可直接优化内存布局;而 new Array() 需经历构造函数调用、原型链查找、内部属性设置等步骤,开销更大:
- 字面量是编译期确定的静态结构,初始化速度更快
- 构造函数方式可能触发额外的类型推断和稀疏数组标记(尤其
new Array(n)),影响后续push、map等方法的内联优化 - 实测在大量数组创建场景中(如渲染循环、数据批量处理),字面量平均快 15%–30%
需要预设长度或默认值?这样更安全
如果目标是创建固定长度并填充默认值(例如全 0 数组),不要依赖 new Array(n) + fill() 的组合(虽可行但冗余),而是优先用字面量配合 Array.from 或扩展运算符:
-
Array.from({length: 5}, () => 0)→[0, 0, 0, 0, 0] -
Array(5).fill(0)可用,但底层仍基于构造函数,语义稍弱 - 避免
[...Array(5)].map(() => 0)—— 会产生稀疏数组再映射,效率更低
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











