# 数组的「删尾术」:JavaScript 的 pop() 方法,你真的会用吗?
之前我们聊过用 `push()` 往数组末尾「塞」元素,今天咱们换个方向——如果想在数组的「尾巴」上「剪一刀」,该用哪个方法?答案就是 `pop()`。
别小看这个方法,它在实际开发中可没少帮我们「善后」。比如用户列表要移除最后一条记录、购物车要删除刚添加的商品……这些场景都可能用到它。咱们今天就掰开了、揉碎了,把 `pop()` 讲透。
---
## 先看一段代码:pop() 到底干了啥?
假设你有一个数组,存着最近三天写的代码笔记:
```javascript
let codeNotes = ["8.1:学会 push()", "8.2:搞懂数组长度", "8.3:今天学 pop()"];
```
现在你想删除最后一条笔记(也就是 `"8.3:今天学 pop()"`),这时候 `pop()` 就能派上用场了:
```javascript
let removedNote = codeNotes.pop();
```
执行完这行代码后,你会发现:
- 原数组 `codeNotes` 变成了 `["8.1:学会 push()", "8.2:搞懂数组长度"]`(少了最后一个元素);
- 变量 `removedNote` 存储了被删除的元素,值是 `"8.3:今天学 pop()"`。
## 拆解 pop() 的「行为模式」
### 1. 它会「动刀」原数组
和 `push()` 类似,`pop()` 是个「暴力」的操作——**直接修改原数组**,而不是生成一个新数组。
举个例子:
如果你有另一个变量 `temp = codeNotes`(让 `temp` 指向 `codeNotes` 的内存地址),当执行 `codeNotes.pop()` 后,`temp` 也会跟着变。因为它们指向同一个数组,只是「名字」不同而已。
这种特性叫「原地修改」,在 JavaScript 数组方法里很常见(比如 `shift()`、`splice()` 也是这样)。
### 2. 它只删最后一个,还「报」删的是谁
`pop()` 的操作非常「专一」:只删数组的**最后一个元素**,不会碰前面的。而且它还会「汇报战果」——返回被删除的那个元素的值。
如果数组是空的(没有元素),`pop()` 会返回 `undefined`(就像你翻一个空抽屉,自然什么都拿不到)。
比如:
```javascript
let emptyArr = [];
let result = emptyArr.pop();
console.log(result); // 输出 undefined
console.log(emptyArr); // 还是空数组 []
```
## 对比 push():一对「增删CP」
之前学的 `push()` 是往数组末尾「加元素」,返回新长度;而 `pop()` 是从末尾「删元素」,返回被删的值。这对组合简直是「增删CP」,经常一起出现。
比如,我们可以用它们实现一个「最近访问记录」功能:最多保存5条记录,超过就删掉最旧的(其实更准确的是用 `unshift()` 和 `pop()` 配合,但原理类似)。
```javascript
let recentVisits = [];
function addVisit(page) {
recentVisits.push(page); // 新页面加到末尾
if (recentVisits.length > 5) {
recentVisits.pop(); // 超过5条,删掉最后一个(最旧的)
}
}
// 测试:连续访问6个页面
addVisit("/home");
addVisit("/profile");
addVisit("/cart");
addVisit("/order");
addVisit("/settings");
addVisit("/help");
console.log(recentVisits);
// 输出:["/profile", "/cart", "/order", "/settings", "/help"](最早的 /home 被删掉了)
```
## 生活里的 pop():像不像「吃最后一块蛋糕」?
其实 `pop()` 的逻辑特别贴近生活——想象你有一个蛋糕盒,里面叠着几块蛋糕(数组元素),每次只能拿走最上面的那块(最后一个元素)。你拿了之后,盒子里的蛋糕变少了,而你手里多了刚拿的那块。
这种「后进先出」(LIFO, Last In First Out)的规则,其实就是栈(Stack)数据结构的核心。而 `pop()` 就是最典型的「出栈」操作。
## 最后提醒:别用错场景!
虽然 `pop()` 很好用,但也不是万能的。比如:
- 如果你想删数组的第一个元素,应该用 `shift()`(不过它效率比 `pop()` 低,因为要移动后面所有元素的位置);
- 如果你想删中间某个元素,或者按条件删除,得用 `filter()` 或者 `splice()`;
- 如果你想保留原数组,同时得到一个删了末尾元素的新数组,可以用 `slice()`(比如 `const newArr = oldArr.slice(0, -1)`)。
编程里有个很有意思的现象:越简单的方法,越容易被人忽略细节。但正是这些「小方法」,往往能帮你解决大问题。
下次再遇到需要删数组末尾元素的场景,别犹豫,`pop()` 就是你的最佳工具~
数组的「删尾术」:JavaScript 的 pop() 方法,你真的会用吗?
1 分钟阅读
122 字
如果文章对您有帮助,欢迎支持作者继续创作