HTML的<a>标签底层是否调用window.location.assign?
嘿,刚接触Web能问到这个点真的很棒,这刚好是HTML原生行为和JS API容易混淆的地方,我给你理清楚:
首先明确一个核心点:标签的跳转是浏览器原生的导航行为,它并没有直接调用window.location.assign()或者replace()这两个JS方法,不过从效果和历史栈的处理来看,它的默认行为和assign()更接近。
先对比下JS方法和默认行为的差异
window.location.assign(url):会在浏览器的历史记录栈中新增一条记录,点击浏览器的后退按钮可以回到跳转前的页面——这和标签的默认跳转行为完全一致。window.location.replace(url):会替换当前的历史记录,跳转后点击后退会回到跳转前的上一页,而不是当前页——标签默认不会这么做,只有当你给加上replace属性(HTML5新增),或者用JS阻止默认行为后手动调用replace()时,才会触发这种效果。
标签底层到底在做什么?
当你点击一个未被JS阻止默认行为的标签时,浏览器会执行一套内置的导航流程:
- 第一步:解析
href属性的值,把相对路径(比如你写的www.google.com)转换成完整的绝对URL(这里要注意,你写的www.google.com会被浏览器当成相对路径,实际会拼接当前页面的域名,正确写法应该是https://www.google.com)。 - 第二步:根据解析后的URL发起对应的资源请求(可能是HTTP/HTTPS请求,也可能是本地文件请求)。
- 第三步:更新浏览器的历史记录栈,默认是推入一条新的记录(和
assign()的历史栈操作逻辑一致)。 - 第四步:卸载当前页面的资源,渲染新请求到的页面内容。
简单来说,标签的跳转是浏览器内核层面实现的原生功能,不需要依赖JS,而window.location的相关方法是浏览器提供给JS开发者,用来程序化控制页面导航的API,二者是实现页面跳转的两种不同途径,但底层最终都会走到浏览器的导航流程里。
内容的提问来源于stack exchange,提问作者enanone
相关产品推荐
相关产品推荐

