






















location.href和location.assign()进行页面 URL 跳转两者都可以触发页面导航(跳转到新 URL)。
在常见页面跳转场景中,location.href = url 和 location.assign(url) 的行为基本一致:
MDN 对 href 的描述是:它返回完整 URL,并且允许更新;设置 href 会导航到该 URL。
MDN 对 assign() 的描述是:它会让窗口加载并显示指定 URL 的文档。
| API | 是否新增历史记录 | 是否文档级跳转 | 常见场景 |
|---|---|---|---|
location.href = url |
是 | 是 | 常规跳转 |
location.assign(url) |
是 | 是 | 常规跳转(强调“执行导航”语义) |
location.replace(url) |
否 | 是 | 登录后跳转、不希望返回上页 |
location.reload() |
不涉及 | 是(刷新当前页) | 主动刷新当前页面 |
location.href属性location.href 是一个可读写属性,表示当前页面的 URL。当我们改变它的值时,浏览器会跳转到新的页面。
1 |
|
1 |
|
location.assign()方法location.assign() 是 Location 接口的方法,用于加载给定 URL。
在常见页面跳转场景中,它与 location.href 赋值的效果基本一致。
1 |
|
URL 对象等可转为 URL 的值location.assign() 是方法,单元测试里更容易 mock / spy,比如在 Jest 里可以直接断言它是否被调用、参数是否正确从 caniuse 来看,兼容性和 href 一样,所以兼容性角度来看也不用顾虑。
DOMException(如 SecurityError)DOMException(如 SyntaxError)location.href vs location.assign()对一般开发者来说,这两个 API 在日常跳转里差异很小,主要按团队风格选择:
location.href:更短、更常见location.assign():语义更明确1 |
|
此外,我们知道 location.href 也可作为可读属性,因此从能力上可以说比 assign 更多一点。
StackOverflow 上在十几年前也有关于两个 API 的 pk 讨论(location.href property vs. location.assign method),但结果是“主流共识:功能上基本等价”、““性能差异”被讨论很多,但结论是:有争议且不重要”。
location.replace()1 |
|
location.reload()1 |
|
location.reload(true)是历史写法,true参数并非跨浏览器标准行为。实际项目中建议只使用location.reload()。
在 React/Vue 等单页应用中,站内跳转通常优先使用路由 API(如 router.push)。
location.* 会触发文档级导航,通常会导致整页重新加载。
location.assign() 使用相对较少?主要是工程习惯问题:
location.href 更短单从 URL 跳转角度来看,location.href 和 location.assign() 行为基本一致,团队中只要保持习惯统一即可,如果要考虑测试场景,location.assign() 在相对更好 mock。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。