原生JS获取URL参数的四种常见实现方式
本文详细解析了使用原生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参数的相关内容,建议搜索本站历史文章或继续浏览后续文章,感谢大家的支持!
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
