push和pop是JavaScript数组尾部增删的高效方法,时间复杂度均为O(1),因引擎直接操作length和连续内存,不移动元素;支持多值添加、展开语法及链式删除,适用于栈操作,但不适用于开头或中间位置操作。

JavaScript 数组的 push 和 pop 方法专为尾部操作设计,时间复杂度稳定为 O(1),无需遍历,天然高效。
为什么尾部增删快?
JavaScript 引擎(如 V8)对数组尾部操作做了底层优化:数组内部维护一个 length 属性和连续内存块,push 直接在 length 索引处写入,pop 直接读取并递减 length,不涉及元素位移或内存重分配(除非触发扩容/缩容,但摊还仍是 O(1))。
正确使用 push 添加元素
支持一次添加多个值,返回新长度:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 单个元素:
arr.push(42) - 多个元素:
arr.push(1, 2, 3) - 展开已有数组:
arr.push(...[4, 5])(避免用push.apply,易栈溢出) - 注意:不要用
push添加undefined或空槽位来“占位”,这会破坏数组稀疏性,影响性能和forEach等方法行为
安全使用 pop 删除元素
pop 总是删除最后一个元素并返回它;若数组为空,返回 undefined:
立即学习“Java免费学习笔记(深入)”;
- 基础用法:
const last = arr.pop() - 可链式调用:
arr.pop(); arr.pop();或结合条件:if (arr.length) arr.pop() - 避免误判空数组:
arr.pop() === undefined不能区分“原为空”和“末尾本就是undefined”,应优先用arr.length > 0判断 -
pop不会释放内存(仅减少length),大量删除后若需真正收缩内存,可赋值arr.length = 0或重新赋值[]
对比其他方法,明确适用边界
尾部操作 ≠ 任意位置操作:
- 想在开头增删?用
unshift/shift—— 但它们是 O(n),会移动所有元素 - 想删中间元素?用
splice(index, 1)—— 也是 O(n),慎用于大数组 - 模拟栈结构?
push入栈,pop出栈,是最自然、最高效的选择 - 需要不可变操作?别直接改原数组,用扩展符创建新数组:
[...arr, newItem]或arr.slice(0, -1),但性能不如原地push/pop

















