JavaScript使用URLSearchParams优雅获取URL携带的参数

 更新时间:2025年08月18日 08:20:35   作者:南风晚来晚相识  
这篇文章主要为大家详细介绍了JavaScript如何使用URLSearchParams优雅获取URL携带的参数,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

需求描述

今天遇见一个问题,再请求接口的时候。

需要知道返回来的url中某个参数的值与返回来的数据是否匹配。

因此我们需要获取URL携带的参数的参数值。

我知道这个需求对很多小伙伴来说,非常简单。三下五除二就写下了如下的代码

获取url地址栏中的参数

思路如下:

1,通过string.split方法通过?分割成为2部分,得到aaa=newList&regionDd=12345&user=zhangsan

2,然后在通过 & 分割成为2部分,得到aaa=newList, regionDd=12345, user=zhangsan

3,最后在通过 = 分割成为key:value的形式

const responseURL  = "http://localhost:8088/list/query-list/?aaa=newList&regionDd=12345&user=zhangsan"
// 上面这个字符串,我想获取到aaa的值是 newList。应该如何实现
function parseUrlParams(url,keyName) {
  const queryString = url.split('?')[1];
  if (!queryString) return undefined;
  const params = {};
  const pairs = queryString.split('&');
  console.log('pairs', pairs)
  for (let pairItem of pairs) {
    const [key, value] = pairItem.split('=');
    params[decodeURIComponent(key)] = decodeURIComponent(value || '');
  }
  return params[keyName];
}

console.log(parseUrlParams(responseURL,'user'))

decodeURIComponent 的作用

有的小伙伴看见我使用了decodeURIComponent,想知道decodeURIComponent的作用?

decodeURIComponent 的作用是 将 URL 编码后的参数名和参数值还原为人类可读的原始字符。

确保解析后的参数值符合预期。

具体说明:

URL 中某些特殊字符(如空格、&, =, 中文等)会被编码成 % 开头的格式(例如空格变成 %20,中文可能变成 %E4%B8%AD)。

decodeURIComponent 兼容性非常好。

encodeURIComponent 的作用说明

假设 URL 是:

"http://example.com?user=abc%20test&name=%E5%BC%A0%E4%B8%89"

原始参数值:

user = abc test
name= '张三'

未解码的结果

{user: 'abc%20test', name: '%E5%BC%A0%E4%B8%89'}

使用 decodeURIComponent 解码后:

{user: 'abc test', name: '张三'}

URLSearchParams 的简单说明

除了使用上面的方法,其实还有一个方法可以更加优雅的实现。

掌声有请我们今天的主角。URLSearchParams 闪亮登场。

URLSearchParams 是 ECMAScript 2015(ES6)引入的内置对象,用于解析和操作 URL 中的查询参数(即 URL 地址栏中 "?" 后面的部分)

URLSearchParams 是浏览器原生 API,能自动处理 URL 编码(如 %20 转空格)。

通过 .get(name) 获取参数值,若参数不存在则返回 null

如果 URL 中存在多个同名参数(如 dim=abc&dim=cvm), get() 会返回第一个值abc

params.set(key, value) 如果key不存在就是新增参数,如果key存在就是修改参数值

params.del(key) 删除某个参数

URLSearchParams 新增,修改,删除参数

const responseURL  = "http://example.com?user=abc%20test&name=%E5%BC%A0%E4%B8%89"
const queryString = responseURL.split('?')[1];
if(queryString){
  const params = new URLSearchParams(queryString);
  // name存在,更改参数
  params.set('name', '华佗'); 
  // sex不存在,设置新的参数  
  params.set('sex', '男'); 
  // 删除user这个参数
  params.delete('user')
  console.log(22, params)
}

使用 URLSearchParams 解析参数

// url还是之前那个参数
const responseURL  = "http://example.com?user=abc%20test&name=%E5%BC%A0%E4%B8%89"
function parseUrlParams(url) {
  // 分割出查询参数部分
  const queryString = url.split('?')[1];
  if (!queryString) return undefined;
 
  // 使用 URLSearchParams 解析参数
  const params = new URLSearchParams(queryString);
  // 直接获取 user 参数值
  return params.get('user'); // 返回 "abc test"
}
console.log(parseUrlParams(responseURL))

URLSearchParams浏览器的兼容性

  • Chrome 49+
  • Firefox 18+
  • Edge 14+
  • Safari 10.1+
  • Opera 36+

以上支持。

不支持:Internet Explorer 全系列(包括 IE11)

兼容性处理

const responseURL  = "http://localhost:8088/list/query-list/?aaa=newList&regionDd=12345&user=zhangsan"
function parseUrlParams(url, keyName) {
  try {
    const queryString = url.split('?')[1];
    if (!queryString) return undefined;
    
    // 优先使用原生 API
    if (window.URLSearchParams) {
      return new URLSearchParams(queryString).get(keyName);
    }
    // 兼容旧版浏览器的解析方案
    const params = {};
    queryString.split('&').forEach(pairItem => {
      const [key, value] = pairItem.split('=');
      params[decodeURIComponent(key)] = decodeURIComponent(value || '');
    });
    return params[keyName];
  } catch (e) {
    console.error('URL 解析失败:', e);
    return undefined;
  }
}
console.log(parseUrlParams(responseURL, 'aaa'));

到此这篇关于JavaScript使用URLSearchParams优雅获取URL携带的参数的文章就介绍到这了,更多相关JavaScript获取URL携带参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  •  javascript数组中的findIndex方法 

     javascript数组中的findIndex方法 

    这篇文章主要介绍了javascript数组中的findIndex方法,findIndex() 方法返回传入一个测试条件函数符合条件的数组第一个元素位置,下面更多相关资料,需要的小伙伴可以参考一下
    2022-03-03
  • 详解如何利用JavaScript绘制堆叠柱状图

    详解如何利用JavaScript绘制堆叠柱状图

    堆叠柱状图将每个柱子进行分割以显示相同类型下各个数据的大小情况。可以形象得展示一个大分类包含的每个小分类的数据,以及各个小分类的占比,显示的是单个项目与整体之间的关系。本文将利用JavaScript实现堆叠柱状图的绘制,需要的可以参考一下
    2022-03-03
  • ES6基础之数组和对象的拓展实例详解

    ES6基础之数组和对象的拓展实例详解

    这篇文章主要介绍了ES6基础之数组和对象的拓展,结合实例形式详细分析了ES6数组和对象拓展运算符、拓展方法的使用及相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • 基于JS实现接粽子小游戏的示例代码

    基于JS实现接粽子小游戏的示例代码

    端午节马上就到了,听说你们公司没发粽子大礼包?没关系,这里用 JS实现了一个简单的接粽子小游戏,能接到多少粽子,完全看你手速,快跟随小编一起来学习学习吧
    2022-05-05
  • JavaScript通过代码调用Flash显示的方法

    JavaScript通过代码调用Flash显示的方法

    这篇文章主要介绍了JavaScript通过代码调用Flash显示的方法,实例分析了JavaScript通过flash插件swfobject.js调用flash显示的具体操作技巧,需要的朋友可以参考下
    2016-02-02
  • Wordpress ThickBox 点击图片显示下一张图的修改方法

    Wordpress ThickBox 点击图片显示下一张图的修改方法

    Wordpress自带的ThickBox特效中,单击图片会调用 tb_remove 以关闭特效窗口,现将修改其动作为显示下一张图。
    2010-12-12
  • List Information About the Binary Files Used by an Application

    List Information About the Binary Files Used by an Applicati

    List Information About the Binary Files Used by an Application...
    2007-06-06
  • JavaScript匿名函数用法分析

    JavaScript匿名函数用法分析

    这篇文章主要介绍了JavaScript匿名函数用法,实例分析了匿名函数的功能、定义及具体用法,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • 微信小程序通过保存图片分享到朋友圈功能

    微信小程序通过保存图片分享到朋友圈功能

    小程序内是不能直接分享到朋友圈的。所以只能通过生成图片,携带小程序二维码,保存到手机相册,让用户自己选择发到朋友圈。然后可以通过在小程序中识别二维码来进入小程序的指定页面。下面小编给大家分享实现代码,需要的朋友参考下吧
    2018-05-05
  • 微信小程序选择图片和放大预览图片功能

    微信小程序选择图片和放大预览图片功能

    这篇文章主要介绍了微信小程序图片放大预览功能的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11

最新评论