之前我们聊过用 push()
往数组末尾「塞」元素,今天咱们换个方向——如果想在数组的「尾巴」上「剪一刀」,该用哪个方法?答案就是 pop()
。
别小看这个方法,它在实际开发中可没少帮我们「善后」。比如用户列表要移除最后一条记录、购物车要删除刚添加的商品……这些场景都可能用到它。咱们今天就掰开了、揉碎了,把 pop()
讲透。
先看一段代码:pop() 到底干了啥?
假设你有一个数组,存着最近三天写的代码笔记:
let codeNotes = ["8.1:学会 push()", "8.2:搞懂数组长度", "8.3:今天学 pop()"];
现在你想删除最后一条笔记(也就是 "8.3:今天学 pop()"
),这时候 pop()
就能派上用场了:
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
(就像你翻一个空抽屉,自然什么都拿不到)。
比如:
let emptyArr = [];
let result = emptyArr.pop();
console.log(result); // 输出 undefined
console.log(emptyArr); // 还是空数组 []
对比 push():一对「增删CP」
之前学的 push()
是往数组末尾「加元素」,返回新长度;而 pop()
是从末尾「删元素」,返回被删的值。这对组合简直是「增删CP」,经常一起出现。
比如,我们可以用它们实现一个「最近访问记录」功能:最多保存5条记录,超过就删掉最旧的(其实更准确的是用 unshift()
和 pop()
配合,但原理类似)。
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()
就是你的最佳工具~
评论