原生JS获取URL参数的四种常见实现方式

作者:闭包旅人时间:2026-10-26 00:11:50浏览:330

本文详细解析了使用原生JavaScript获取URL查询参数的四种常见方法。内容涵盖正则表达式匹配、利用A标签内置属性、字符串Split分割以及现代浏览器推荐的URLSearchParams接口。重点对比了各方法的代码实现、适用场景及兼容性差异,特别是针对IE浏览器的兼容性问题提供了说明,帮助开发者根据实际需求选择最优方案。

前言

在前端开发工作中,经常需要对URL进行解析和处理,其中最典型的需求便是提取URL中携带的参数。虽然现代前端框架通常提供了便捷的API来处理此类任务,但在某些场景下无法依赖框架,必须使用原生JavaScript实现。这也是前端面试中常见的问题之一。本文将通过手写代码,演示如何利用原生JS获取URL参数。

1. 获取方式总结

使用原生JavaScript提取URL参数有多种实现路径,本文将逐一介绍几种主流且常用的方法。

  • 通过正则匹配的方式
  • 利用a标签内置方法
  • 利用split方法分割法
  • 使用URLSearchParams方法

2. 具体实现方法

2.1 正则匹配法

这是一种较为传统且稳健的做法,核心在于熟练掌握正则表达式的编写。

具体代码实现如下:

<script>
  // 利用正则表达式
  let url = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100"
  // // 返回参数对象
  function queryURLParams(url) {
    let pattern = /(\w+)=(\w+)/ig; //定义正则表达式
    let parames = {}; // 定义参数对象
    url.replace(pattern, ($, $1, $2) => {
      parames[$1] = $2;
    });
    return parames;
  }
  console.log(queryURLParams(url))
</script>

上述代码的关键在于正则表达式的定义以及replace方法的配合使用。在正则替换回调中,$2分别对应完整的匹配项(如name=elephant)、键名(name)和值(elephant),依此类推。关于replace结合正则的高级用法,建议读者另行查阅相关文档深入学习。

运行效果如下:

前言

2.2 利用a标签

这种方法相对小众,因其带有一定的“黑科技”色彩。其原理是利用浏览器自动解析A标签的特性,通过访问A标签的href、hash、search等内置属性来获取URL的各个组成部分。

前言

前言

代码示例如下:

<script>
  let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100#smallpig"
  function queryURLParams(url) {
    // 1.创建a标签
    let link = document.createElement('a');
    link.href = url;
    let searchUrl = link.search.substr(1); // 获取问号后面字符串
    let hashUrl = link.hash.substr(1); // 获取#后面的值
    let obj = {}; // 声明参数对象
    // 2.向对象中进行存储
    hashUrl ? obj['HASH'] = hashUrl : null; // #后面是否有值

    let list = searchUrl.split("&");
    for (let i = 0; i < list.length; i++) {
      let arr = list[i].split("=");
      obj[arr[0]] = arr[1];
    }
    return obj;
  }
  console.log(queryURLParams(URL))
</script>

在代码中,首先动态创建一个A标签元素,随后通过该元素的属性分别提取URL的不同部分。这种思路与Vue等框架中路由跳转后获取参数的原理有相似之处。

运行效果如下:

前言

2.3 split分割法

该方法利用split函数将字符串按指定字符分割为数组的特性,巧妙地将URL参数逐个分离出来。

代码实现如下:

<script>
  let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100"
  function queryURLParams(URL) {
    // const url = location.search; // 项目中可直接通过search方法获取url中"?"符后的字串
    let url = URL.split("?")[1];
    let obj = {}; // 声明参数对象
    let arr = url.split("&"); // 以&符号分割为数组
    for (let i = 0; i < arr.length; i++) {
      let arrNew = arr[i].split("="); // 以"="分割为数组
      obj[arrNew[0]] = arrNew[1];
    }
    return obj;
  }
  console.log(queryURLParams(URL))
</script>

在实际项目应用中,可以直接使用location.search获取问号“?”之后的字符串部分。此处为了演示方便,使用了split进行分割处理。

运行效果如下:

前言

2.4 URLSearchParams方法

URLSearchParams接口提供了便捷的URL参数获取方式,但需注意其浏览器兼容性。根据官方文档说明:

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

该接口提供了丰富的方法用于处理URL参数,本文仅介绍如何获取参数值,更详细的用法请参考官方文档。

代码示例如下:

<script>
  let URL = "http://www.baidu.com?name=elephant&age=25&sex=male&num=100"
  function queryURLParams(URL) {
    let url = URL.split("?")[1];
    const urlSearchParams = new URLSearchParams(url);
    const params = Object.fromEntries(urlSearchParams.entries());
    return params
  }
  console.log(queryURLParams(URL))
</script>

此处仅用两行核心代码便完成了参数解析。需要注意的是,urlSearchParams.entries()返回的是一个迭代器(iterator),因此需要利用Object.fromEntries()方法将键值对列表转换为普通对象。

关于迭代协议的具体细节,可参考官方文档:迭代协议

运行效果如下:

前言

兼容性:

前言

从兼容性表格可以看出,该接口不支持IE浏览器。

附:获取URL携带参数实例

getUrlParamValue = function (name) {
if (name == null || name == 'undefined') {return null; }
var searchStr = decodeURI(location.search);
var infoIndex = searchStr.indexOf(name + "=");
if (infoIndex == -1) { return null; }
var searchInfo = searchStr.substring(infoIndex + name.length + 1);
var tagIndex = searchInfo.indexOf("&");
if (tagIndex!= -1) { searchInfo = searchInfo.substring(0, tagIndex); }
return searchInfo;
};

总结

本文介绍了四种解析URL链接参数的方法。其中,split分割法因兼容性好、实现简单而应用最为广泛;URLSearchParams作为较新的标准接口,也逐渐被广泛认可,且存在多种方案使其在IE浏览器中可用。

至此,关于原生JS获取URL链接参数的几种常见方法介绍完毕。如需了解更多JS获取URL参数的相关内容,建议搜索本站历史文章或继续浏览后续文章,感谢大家的支持!

作者最新文章