关于前端:windowlocation-备忘单助你理解有着地址问题

44次阅读

共计 3741 个字符,预计需要花费 10 分钟才能阅读完成。

作者: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          → 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

这三个都能够重定向,区别在于浏览器的历史记录。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… 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

正文完
 0