当前位置:   article > 正文

前端必备基础知识:window.location 详解_window.location 参数的key是从哪里来的的

window.location 参数的key是从哪里来的的

作者简介:
李中凯
八年多工作经验 前端负责人,
擅长JavaScript/Vue。
掘金文章专栏:https://juejin.im/user/57c7cb8a0a2b58006b1b8666/posts
公众号:1024译站
 


前端开发人员对 window.location对象应该不陌生,通过它不但可以获取当前页面的地址信息,还可以修改某些属性,实现页面跳转和刷新等。

我们以一个常见的 URL 为例,看看window.location包含哪些属性和方法。

  1. window.location.href     → 'https://www.jianshu.com/search?q=JS#comments'
  2.                .origin   → 'https://www.jianshu.com'
  3.                .protocol → 'https:'
  4.                .host     → 'www.jianshu.com'
  5.                .hostname → 'www.jianshu.com'
  6.                .port     → ''
  7.                .pathname → '/search/'
  8.                .search   → '?q=JS'
  9.                .hash     → '#comments'
  1. window.location.assign('url')
  2.                .replace('url')
  3.                .reload()
  4.                .toString()

window.location 属性一览表

window.location   含义
.originURL 基础地址,包括协议名、域名和端口号
.protocol协议 (http: 或 https:)
.host域名+端口号
.hostname域名
.port端口号
.pathname路径(以/开头)
.search查询字符串,以?开头
.hash页面锚点,以#开头
.href完整 URL

比较容易混淆的是hosthostname这两个属性,区别是前者还包含了端口号。

修改属性值

以上属性除了origin是只读属性,其他都可以修改。修改后的效果就是跳转到相应的新地址。

  1. window.location.protocol = 'https'
  2.                .host     = 'localhost:8080'
  3.                .hostname = 'localhost'
  4.                .port     = '8080'
  5.                .pathname = 'path'
  6.                .search   = 'q=vue' // (不需要带 ?)
  7.                .hash     = 'target' // (不需要带 #)
  8.                .href     = 'https://www.kaysonli.com'

如何访问 Location 对象

window.location返回 Location 类型的一个实例对象,包含当前页面的地址信息。可以通过以下几种方式访问:

  1. window.location          → Location
  2. window.document.location → Location
  3. document.location        → Location
  4. location                 → Location

这几个变量都是等价的,因为它是全局变量。但是建议避免直接用location变量,因为很容易跟其他局部变量混淆,造成不必要的麻烦。比如:

  1. location.protocol; // 'https'
  2. function localFile() {
  3.   const location = '/vue';
  4.   return location.protocol;
  5.   // ❌ undefined
  6.   //     这里的局部变量 "location"覆盖了全局变量
  7. }

推荐用window.location,这样一眼就可以看出用的是全局变量。

window.location 方法一览表

window.location动作
.assign()导航到指定 URL
.replace()导航到指定 URL并删除当前页面的访问记录
.reload()重新加载当前页面
.toString()返回 URL 字符串

.toString().href都是返回 URL,它们之间有区别吗?结果是一样的,性能上稍微有点差别。通过 JSPerf 上的性能测试结果可以看出,.href稍快,通过window.location拼接字符串的形式速度最慢。

性能对比

.assign() 和直接修改href是等价的,那么它们跟.replace()的区别是什么呢?

.assign() 在跳转新地址的同时会留下当前页面的访问记录,点击浏览器返回按钮会回到原来的页面,.replace()则不会保留。

.assign()执行流程:

  1. 1. 打开空白页
  2. 2. 访问 www.kaysonli.com (当前页)
  3. 3. 加载新页面 声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
    推荐阅读
    相关标签