字面量创建([])最优,生成快数组支持o(1)访问;new array()需慎用,预分配长度易致哈希表模式;array.of()解决单参数歧义,语义安全且性能持平。

JavaScript 数组的创建方式直接影响其底层存储模式和后续操作性能。选错创建方法,可能让本该 O(1) 的访问退化为 O(n),尤其在处理中大型数据集时,差异会明显暴露。
字面量创建最稳,适合绝大多数场景
用 [] 创建是最推荐的方式,引擎能立即识别为“快数组”(Fast Elements),即连续内存块,支持常数时间索引访问。
- 元素类型一致(如全数字)时,V8 会启用优化路径,读取效率接近原生数组
- 避免中途混入不同类型的值,否则触发“去优化”,转为哈希表存储,访问变慢约 50%
- 示例:const arr = [1, 2, 3, 4] ✅;而 const arr = [1, '2', 3] ❌(类型不纯,易降级)
new Array() 要分情况使用,不是不能用
new Array(n) 创建的是预分配长度的稀疏数组,所有槽位为空(not undefined,而是 empty slot),这会强制引擎进入哈希表模式。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 若想初始化为具体值,应配合
.fill():const arr = new Array(1000).fill(0) - 直接 new Array(1, 2, 3) 等价于 [1, 2, 3],但语义不直观,容易误读,建议统一用字面量
- 预设大长度 + 后续逐个赋值(如 arr[i] = x),比反复 push 更高效,前提是能预估容量
Array.of() 解决构造函数歧义问题
当需要创建仅含一个数字的数组时,new Array(5) 会被解释为长度为 5 的空数组,而 Array.of(5) 明确返回 [5]。
- 适用于动态参数场景,比如封装工具函数:function createArr(...args) { return Array.of(...args); }
- 它不重载 length 行为,避免了构造函数的“单数字陷阱”,语义更安全
- 性能与字面量基本持平,无额外开销
数据处理性能从创建就已埋下伏笔
数组一旦创建,其内部模式会影响所有后续操作——遍历、增删、解构等。
- 快数组下,
for循环最快;forEach因闭包和回调开销,10 万元素时慢约 25% - 稀疏或混合类型数组,
map/filter可能触发多次类型检查,JIT 无法内联优化 - 解构赋值也有差异:数组解构比对象解构慢 3 倍左右,因为要走迭代器协议;而
{0:a, 1:b} = arr实际更快
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










