作者: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 的区别

在下面的示例中,你可能留神到hosthostname返回雷同的值。 那么为什么要这些属性。 好吧,这与端口号无关,让咱们来看看。

没有端口的 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

这三个都能够重定向,区别在于浏览器的历史记录。 hrefassign 会把以后页面保留在历史记录中,而replace则不会。 因而,如果你想创立一种导航无奈回到原始页面的体验,请应用replace

当初的问题是hrefassign。 我更喜爱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... 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。