JavaScript 中URL 查询字符串(query string)的序列与反序列化的方法

 更新时间:2023年01月11日 08:35:18   作者:yuzhihui  
在 JavaScript 中,可以使用 URLSearchParams 对象来处理 URL 中的查询字符串,这篇文章主要介绍了JavaScript 中URL查询字符串(query string)的序列与反序列化,需要的朋友可以参考下

方法一:

在 JavaScript 中,可以使用 URLSearchParams 对象来处理 URL 中的查询字符串。

序列化(将 JavaScript 对象转换为查询字符串)可以使用 URLSearchParams 对象的 append() 方法,如下所示:

let params = new URLSearchParams();
params.append('name', 'John');
params.append('age', '30');
let queryString = params.toString();
console.log(queryString); 

反序列化(将查询字符串转换为 JavaScript 对象)可以使用 URLSearchParams 的构造函数,如下所示:

let queryString = "name=John&age=30";
let params = new URLSearchParams(queryString);
console.log(params.get('name')); // "John"
console.log(params.get('age')); // "30"

对于反序列化的操作可以使用URL的search属性,来解析query string

let url = new URL('https://example.com?name=John&age=30');
let params = new URLSearchParams(url.search);
console.log(params.get('name')); // "John"
console.log(params.get('age')); // "30"

需要注意的是,URLSearchParams 对象只能用于处理查询字符串,而不能用于创建或解析整个 URL。

如果需要更高级的处理方式,可以使用其它库或第三方函数库,比如 qs, querystring 等库来处理。

对于反序列化的操作中的URLSearchParams的使用还有一些方法,比如:

  • has(name): 返回一个 Boolean 值,表示是否存在名称为 name 的查询参数。
  • get(name): 返回名称为 name 的查询参数的值,如果不存在,则返回 null。
  • getAll(name): 返回所有名称为 name 的查询参数的值组成的数组,如果不存在,则返回空数组。
  • set(name, value): 设置名称为 name 的查询参数的值为 value。如果已经存在同名参数,将会覆盖原来的值。
  • append(name, value): 添加名称为 name 的查询参数,并设置其值为 value。如果已经存在同名参数,会添加一个新的参数。
  • delete(name): 删除名称为 name 的查询参数。
  • entries(): 返回一个迭代器,遍历所有查询参数的键值对。
  • keys(): 返回一个迭代器,遍历所有查询参数的名称。
  • values(): 返回一个迭代器,遍历所有查询参数的值。

这些方法都能给出更灵活的操作,请根据具体需求来选择使用

方法二:

当然,如果需要手动处理查询字符串,也可以使用 JavaScript 的标准字符串处理函数来实现。

序列化,可以使用下面的代码把一个对象转换为查询字符串:

function objectToQueryString(obj) {
  return Object.entries(obj).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');
}
console.log(objectToQueryString({name: 'John', age: '30'}))

反序列化,可以使用下面的代码把查询字符串转换为一个对象:

function queryStringToObject(queryString) {
  let obj = {};
  let arr = queryString.split("&");
  for(let i = 0; i < arr.length; i++){
    let temp = arr[i].split("=");
    obj[temp[0]] = temp[1];
  }
  return obj;
}
console.log(queryStringToObject('name=John&age=30'))

需要注意的是,上述代码使用了 encodeURIComponent 和 decodeURIComponent 来编码和解码查询字符串中的字符,以防止出现无效或不安全的字符。

这些方法都能达到相同的目的,你可以根据项目中使用的JavaScript环境和需要的复杂度来进行选择

到此这篇关于JavaScript 中URL 查询字符串(query string)的序列与反序列化的文章就介绍到这了,更多相关js url查询字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • LayUi数据表格自定义赋值方式

    LayUi数据表格自定义赋值方式

    今天小编就为大家分享一篇LayUi数据表格自定义赋值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • CocosCreator ScrollView优化系列之分帧加载

    CocosCreator ScrollView优化系列之分帧加载

    这篇文章主要介绍了CocosCreator ScrollView的优化,从分帧加载进行了讲解,对性能优化感兴趣的同学,一定要看一下
    2021-04-04
  • 小程序双头slider选择器的实现示例

    小程序双头slider选择器的实现示例

    这篇文章主要介绍了小程序双头slider选择器的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • js格式化输入框内金额、银行卡号

    js格式化输入框内金额、银行卡号

    这篇文章主要介绍了js格式化输入框内金额、银行卡号,采用“keyup”事件处理格式化,每4位数一组中间空格隔开,如何格式化输入框内金额、银行卡号,需要了解的朋友可以参考一下
    2016-02-02
  • JavaScript动态改变div属性的实现方法

    JavaScript动态改变div属性的实现方法

    这篇文章主要介绍了JavaScript动态改变div属性的实现方法,涉及javascript操作页面div元素属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • JavaScript组合模式Composite Pattern

    JavaScript组合模式Composite Pattern

    这篇文章主要介绍了学习理解JavaScript组合模式,组合模式及Composite Pattern又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象
    2022-04-04
  • js实现图片漂浮效果的方法

    js实现图片漂浮效果的方法

    这篇文章主要介绍了js实现图片漂浮效果的方法,实例分析了javascript实现图片漂浮的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • js实现input密码框提示信息的方法(附html5实现方法)

    js实现input密码框提示信息的方法(附html5实现方法)

    这篇文章主要介绍了js实现input密码框提示信息的方法,涉及JavaScript页面元素的获取,属性判断及样式设置等技巧,并附带html5的相关实现方法,需要的朋友可以参考下
    2016-01-01
  • JS 特殊运算符的使用

    JS 特殊运算符的使用

    JavaScript中包含了一系列不常见但功能强大的特殊运算符,如空值合并运算符(??)、可选链运算符(?.)等,这些运算符在特定场景下极大地简化了代码的复杂度,并提高了开发效率,通过深入了解这些特殊运算符,开发者可以更加高效地处理各种数据和逻辑
    2024-09-09
  • 无编译/无服务器实现浏览器的CommonJS模块化

    无编译/无服务器实现浏览器的CommonJS模块化

    这篇文章主要介绍了无编译/无服务器实现浏览器的CommonJS模块化,对模块化感兴趣的同学,可以参考下
    2021-05-05

最新评论