前端JS获取URL参数的4种方法总结


Posted in Javascript onApril 05, 2022

前言

对于前端来说,无论是在面试或者工作中都可能遇到处理 url 参数的问题,使用框架进行项目开发时或许不用,有自带的获取参数方式,但是抛开使用框架来说我们也可以使用原生 js 方式或者借用第三方库来实现参数的获取并对象化,下面就对具体用法进行介绍整理。

方法1: 字符串 split 方法

因为一个 url 地址是字符串形式的,所以利用 split 方法将参数提取出来,该方法比较常用,而且容易理解(对于不太会使用正则的我来说,haha~)

let URL = "http://www.baidu.com?name=张三&age=25&sex=男&wife=小红"
function getUrlParams(url) {
    // 通过 ? 分割获取后面的参数字符串
    let urlStr = url.split('?')[1]
    // 创建空对象存储参数
	let obj = {};
    // 再通过 & 将每一个参数单独分割出来
	let paramsArr = urlStr.split('&')
	for(let i = 0,len = paramsArr.length;i < len;i++){
        // 再通过 = 将每一个参数分割为 key:value 的形式
		let arr = paramsArr[i].split('=')
		obj[arr[0]] = arr[1];
	}
	return obj
}
console.log(getUrlParams(URL))

前端JS获取URL参数的4种方法总结

方法2: 利用 URLSearchParams 方法

在 MDN 中结合两种方法实现参数的获取:1. 使用 new URLSearchParams(url) 方法,返回一个 URLSearchParams 对象,再调用 entries() 方法返回一个可迭代对象(Iterator);2. 使用 Object.fromEntries(iterable) 方法转化为普通对象

let URL = "http://www.baidu.com?name=Jack&age=25&sex=men&wife=Lucy"
function getUrlParams2(url) {
	let urlStr = url.split('?')[1]
	const urlSearchParams = new URLSearchParams(urlStr)
	const result = Object.fromEntries(urlSearchParams.entries())
	return result
}
console.log(getUrlParams2(URL))

前端JS获取URL参数的4种方法总结

特别的:URLSearchParams 方法不仅可以获取参数,还可以将参数对象转为 字符串,详细用法可查看 MDN 中的介绍,并且该方法存在浏览器兼容性问题。

方法3: 利用正则匹配方法

正则匹配功能强大相信很多小伙伴都知道,不仅可以实现在登录注册时的账号、密码、邮箱、手机号等等的验证,还可以非常方便的处理一些字符串(校验、替换、提取等操作),难点在于对正则使用的熟练度,这里就是通过正则提取字符串中需要的字符

let URL = "http://www.baidu.com?name=Tom&friend=Jerry"
function getUrlParams3(url){
	// \w+ 表示匹配至少一个(数字、字母及下划线), [\u4e00-\u9fa5]+ 表示匹配至少一个中文字符
	let pattern = /(\w+|[\u4e00-\u9fa5]+)=(\w+|[\u4e00-\u9fa5]+)/ig;
	let result = {};
	url.replace(pattern, ($, $1, $2)=>{
		result[$1] = $2;
	})
	return result
}
console.log(getUrlParams3(URL))

前端JS获取URL参数的4种方法总结

方法4: 使用第三方库 qs

使用第三方库 qs 也可以实现 url 中参数字符的提取,还能实现将参数对象转为 url 参数形式,需要注意的是浏览器 cdn 方式引入时是默认添加到全局对象 window 的 Qs 属性上的

<script src="https://cdn.bootcdn.net/ajax/libs/qs/6.10.3/qs.min.js"></script>
<script>
let URL = "http://www.baidu.com?product='iPhone 13 Pro'&price=¥9999.00"
function getUrlParams4(url){
	// 引入 qs 库时会默认挂在到全局 window 的 Qs 属性上
	// console.log(window)
	let urlStr = url.split('?')[1]
	let result = Qs.parse(urlStr)
	// 拼接额外参数
	let otherParams = {
		num:50,
		size:6.1
	}
	let str = Qs.stringify(otherParams)
	let newUrl = url + str
	return {result,newUrl}
}
console.log(getUrlParams4(URL))
</script>

前端JS获取URL参数的4种方法总结

总结:

到此这篇关于前端JS获取URL参数的4种方法的文章就介绍到这了,更多相关前端获取URL参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js 内存释放问题
Apr 25 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
Mar 31 Javascript
JS+CSS实现DIV层的展开、收缩效果
Jan 28 Javascript
AngularJS Phonecat实例讲解
Nov 21 Javascript
详解Vue.use自定义自己的全局组件
Jun 14 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
Jul 26 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
Aug 23 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
15个顶级开源JavaScript框架和库
Oct 10 Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 Javascript
threejs太阳光与阴影效果实例代码
JS实现数组去重的11种方法总结
Apr 04 #Javascript
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 #Vue.js
JavaScript模拟实现网易云轮播效果
Javascript中Microtask和Macrotask鲜为人知的知识点
vue中div禁止点击事件的实现
Apr 02 #Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 #Vue.js
You might like
php HandlerSocket的使用
2011/05/02 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
php截取视频指定帧为图片
2016/05/16 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python使用Supervisor来管理进程的方法
2015/05/28 Python
Django之模型层多表操作的实现
2019/01/08 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
企业管理专业个人求职信范文
2013/09/24 职场文书
代理协议书范本
2014/04/22 职场文书
搞笑爱情保证书
2014/04/29 职场文书
部门年终奖分配方案
2014/05/07 职场文书
优秀语文教师事迹
2014/05/18 职场文书
2015中学学校工作总结
2015/07/20 职场文书
2015年中秋寄语
2015/07/31 职场文书
Python中Selenium对Cookie的操作方法
2021/07/09 Python
Golang jwt身份认证
2022/04/20 Golang