ReplaceState() vs pushState()

我一直在阅读和寻找优点/缺点之间的 replaceState()pushState()。 同时阅读 Mozilla 的 article和这个 interesting测试,但是我仍然不清楚它们之间的区别。

有人愿意解释一下他们的不同之处吗?

56436 次浏览

从你的链接

history.replaceState() operates exactly like history.pushState() 除了 replaceState ()修改了当前的历史记录条目 创造一个新的。

当您希望更新 状态对象或当前历史记录条目的 URL,以响应某些 用户行为。

如果您只是想更新历史条目,那么使用 replaceState(),否则就使用 pushState(),它将保留旧条目并创建一个新条目。它们是相似的,但是都有不同的效果,所以这取决于您是否想要替换或创建新的历史记录条目。

想象一下,我正在发一副牌,把一张牌放在另一张牌的上面(正面朝上) ,你只能拿到最上面一张牌(也就是我发的最后一张牌)。假设我在那一堆里放了一张红桃 J。下一张牌,如果我使用 replaceState,所以我把红桃 J 取下来,然后把下一张牌放上去。卡的数量是一样的,因为我们刚刚更换了顶部的卡。如果我使用的是 pushState,我会把下一张牌放在红心杰克的上面(所以现在两张牌都存在于堆中,而且堆高了一张牌)。

用 URL 交换类似的卡片,这就是修改 URL 历史记录的方法。

replaceState()改变的网址在浏览器(即,按后退按钮不会带你回来)

pushState()会更改 URL,并将旧的 URL 保留在浏览器历史记录中(即。按下后退按钮就会把你带回去)