字面量定义适合已知数据的初始化,push()适合运行时动态增长;空数组+循环push低效,应改用字面量或array.from()预分配;清空数组用arr.length=0最优。

数组字面量定义(如 [] 或 [1, 2, 3])和 push() 方法解决的是不同阶段的问题:前者是初始化,后者是动态追加。它们不直接可比,但常被误用于同一场景——比如本该一次性定义的数组,却用空数组 + 循环 push 构建,结果拖慢性能。
字面量定义适合已知数据的初始化
如果元素数量和内容在编写时就确定,字面量是最优选择:
- 引擎可静态优化,内存分配一步到位,无中间状态
- 无需调用方法、不触发原型链查找,开销几乎为零
- 例如:
const list = ['a', 'b', 'c', 'd']比const list = []; list.push('a','b','c','d')更快更简洁
push 适合运行时动态增长的场景
当数据来源不确定(如用户输入、API 响应、事件流),push() 是自然且高效的选择:
- 向末尾添加元素时间复杂度接近 O(1),内部通常只需更新长度和写入内存地址
- 批量添加推荐用展开语法:
arr.push(...newItems),比循环调用push少数万次函数调用开销 - 避免用
unshift()替代push()来“倒序构造”,头部插入会引发全部索引重排,十万级数据可能慢百倍
常见低效组合要避开
这些写法看似直观,实则浪费资源:
- 空数组 + 大量
push循环(尤其在 for 循环中反复调用)→ 改用字面量或Array.from()预分配 - 用
push()初始化固定结构(如表单字段名列表)→ 直接字面量更清晰安全 - 频繁
push后又立即pop或shift→ 可能说明数据结构选错,考虑用栈/队列语义更明确的封装
小技巧:清空与重用数组
若需复用数组变量,别用 arr = [](创建新引用),改用:
-
arr.length = 0:最快清空,原引用不变,适合高频操作 -
arr.push(...newData):比先清空再循环push更紧凑 - 注意:
concat()或扩展运算符生成新数组,适用于不可变需求,但大数组有内存压力
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











