前端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函数返回多个返回值的示例代码
Nov 05 Javascript
js字符串完全替换函数分享
Dec 03 Javascript
JavaScript对HTML DOM使用EventListener进行操作
Oct 21 Javascript
Bootstrap每天必学之导航
Nov 26 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 Javascript
浅谈jQuery框架Ajax常用选项
Jul 08 jQuery
JS基于封装函数实现的表格分页完整示例
Jun 26 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 Javascript
Vue 禁用浏览器的前进后退操作
Sep 04 Javascript
微信小程序实现转盘抽奖
Sep 21 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下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
如何判断php数组的维度
2013/06/10 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
几行js代码实现自适应
2017/02/24 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
python list转dict示例分享
2014/01/28 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
在python中安装basemap的教程
2018/09/20 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
Python双链表原理与实现方法详解
2020/02/22 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
会计毕业自我鉴定
2014/02/05 职场文书
结婚老公保证书
2015/02/26 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
Java 写一个简单的图书管理系统
2022/04/26 Java/Android