作者:Samantha Ming
译者:前端小智
起源:medium
有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。
如果你想获取站点的URL信息,那么window.location
对象什么很适宜你! 应用其属性获取无关以后页面地址的信息,或应用其办法进行某些页面重定向或刷新
https://segmentfault.com/sear...
window.location.origin → '"https://segmentfault.com' .protocol → 'https:' .host → 'segmentfault.com' .hostname → 'segmentfault.com' .port → '' .pathname → '/search' .search → '?q=前端小智' .hash → '#2' .href → 'https://segmentfault.com/search?q=前端小智#2'
window.location.assign('url') .replace('url') .reload() .toString()
window.location 属性
window.location | 返回值 |
---|---|
.origin | 站点主地址(协定 + 主机名 + 端口) |
.protocol | 协定架构 (http: 或者 htts: ) |
.host | 域名 + 端口 |
.port | 端口 |
.pathname | 最前页的 '/' 前面跟的门路 |
.search | ? 后跟的查问字符串 |
.hash | 从 # 号开始的局部 |
.href | 残缺网址 |
host 和 hostname 的区别
在下面的示例中,你可能留神到host
和hostname
返回雷同的值。 那么为什么要这些属性。 好吧,这与端口号无关,让咱们来看看。
没有端口的 URL
https://segmentfault.com/search
window.location.host; // 'segmentfault.com'window.location.hostname; // 'segmentfault.com'window.location.port; // ''
带端口的 URL
https://segmentfault.com/sear...
window.location.host; // 'segmentfault.com:8080'window.location.hostname; // 'segmentfault.com'window.location.port; // '8080'
因而,host
将包含端口号,而hostname
将仅返回主机名。
如何更改 URL 属性
咱们不仅能够调用location` 属性来检索URL信息,还能够应用它来设置新属性并更改URL。
// 开始 'https://segmentfault.com/'window.location.pathname = '/tidbits'; // 设置 pathname// 后果 'https://segmentfault.com/tidbits'
上面是你能够更改的属性的残缺列表
// 事例window.location.protocol = 'https' .host = 'localhost:8080' .hostname = 'localhost' .port = '8080' .pathname = 'path' .search = 'query string' // (这里不必写 `?`) .hash = 'hash' // (这里不必写 `#`) .href = 'url'
惟一不能设置的属性是window.location.origin
,此属性是只读的。
Location 对象
window.location
返回一个Location
对象。 它为咱们提供无关页面以后地址的信息。 然而咱们还能够通过几种形式拜访Location
对象。
window.location → Locationwindow.document.location → Locationdocument.location → Locationlocation → Location
咱们这样做的起因是这些是咱们浏览器中的全局变量。
window.location vs location
下面四个属性都指向同一个Location
对象。 我集体更喜爱window.location
并且实际上会防止应用location
。 次要是因为location
看起来像一个一般变量,并且咱们有时可能会不小心将其命名为变量,这将笼罩全局变量。 举个例子:
// https://www.samanthaming.comlocation.protocol; // 'https'function localFile() { const location = '/sam'; return location.protocol; // ❌ undefined // b/c local "location" has override the global variable}
我想大多数开发人员都晓得window
是一个全局变量。这样就不太可能引起混同。诚实说,直到我写了这篇文章,我才晓得location
是一个全局变量。倡议大家多应用 window.location
来代替其它写法。
window.location 办法
办法 | 作用 |
---|---|
.assign() | 加载一个新的文档 |
.replace() | 用新的文档替换以后文档 |
.reload() | 从新加载以后页面 |
.reload() | 返回的URL |
大家都说简历没我的项目写,我就帮大家找了一个我的项目,还附赠【搭建教程】。
window.location.toString
依据 MDN :
此办法返回 URL 的 USVString,它是 Location.href 的只读版本。
换句话说,咱们能够这样失去 href
的值:
// https://www.samanthaming.comwindow.location.href; // https://www.samanthaming.comwindow.location.toString(); // https://www.samanthaming.com
assign vs replace
这两种办法都是重定向或导航到另一个URL。 区别在于assign
是将以后页面保留在历史记录中,因而用户能够应用“后退”按钮导航到该页面。 而应用replace
办法时,不会保留它。 让咱们来看一个例子。
Assign
1. 关上一个新的空白页2. 输出 www.samanthaming.com (当前页)3. 应用 `window.location.assign('https://www.w3schools.com')` 载入新页面4. 按 "返回上一页"5. 返回到了 www.samanthaming.com
Replace
1. 关上一个新的空白页2. 输出 www.samanthaming.com (当前页)3. 应用 `window.location.assign('https://www.w3schools.com')` 载入新页面4. 按 "返回上一页"5. 返回到一个空白页
如何让页面重定向
如何重定向到另一个页面,有3种办法。
window.location.href = 'https://www.samanthaming.com';window.location.assign('https://www.samanthaming.com');window.location.replace('https://www.samanthaming.com');
replace vs assign vs href
这三个都能够重定向,区别在于浏览器的历史记录。 href
和assign
会把以后页面保留在历史记录中,而replace
则不会。 因而,如果你想创立一种导航无奈回到原始页面的体验,请应用replace
当初的问题是href
与assign
。 我更喜爱assign
,因为它是一种办法,因而感觉如同我正在执行一些操作。 还有一个额定的益处是它更易于测试。 我曾经编写了许多Jest
测试,因而通过应用一种办法,它使其更易于模仿。
window.location.assign = jest.fn();myUrlUpdateFunction();expect(window.location.assign).toBeCalledWith('http://my.url');
最终心愿备忘单,心愿能对你有所帮忙,在须要的时候,能疾速给你带来答案。
人才们的 【三连】 就是小智一直分享的最大能源,如果本篇博客有任何谬误和倡议,欢送人才们留言,最初,谢谢大家的观看。
原文:https://morioh.com/p/b444d291...
代码部署后可能存在的BUG没法实时晓得,预先为了解决这些BUG,花了大量的工夫进行log 调试,这边顺便给大家举荐一个好用的BUG监控工具 Fundebug。
交换
有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。
本文 GitHub https://github.com/qq44924588... 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。