共计 3854 个字符,预计需要花费 10 分钟才能阅读完成。
作者:Samantha Ming
译者:前端小智
起源:medium
点赞再看 ,微信搜寻【大迁世界】 关注这个没有大厂背景,但有着一股向上踊跃心态人。本文
GitHub
https://github.com/qq44924588… 上曾经收录,文章的已分类,也整顿了很多我的文档,和教程材料。**
最近开源了一个 Vue 组件,还不够欠缺,欢送大家来一起欠缺它,也心愿大家能给个 star 反对一下,谢谢各位了。
github 地址:https://github.com/qq44924588…
如果你想获取站点的 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/search”8080
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 → Location
window.document.location → Location
document.location → Location
location → Location
咱们这样做的起因是这些是咱们浏览器中的全局变量。
window.location vs location
下面四个属性都指向同一个 Location
对象。我集体更喜爱 window.location
并且实际上会防止应用 location
。次要是因为location
看起来像一个一般变量,并且咱们有时可能会不小心将其命名为变量,这将笼罩全局变量。举个例子:
// https://www.samanthaming.com
location.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.com
window.location.href; // https://www.samanthaming.com
window.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/qq449245884/xiaozhi 曾经收录,欢送 Star。