前端JS獲取URL參數(shù)的4種方法總結(jié)
前言
對(duì)于前端來(lái)說(shuō),無(wú)論是在面試或者工作中都可能遇到處理 url 參數(shù)的問(wèn)題,使用框架進(jìn)行項(xiàng)目開(kāi)發(fā)時(shí)或許不用,有自帶的獲取參數(shù)方式,但是拋開(kāi)使用框架來(lái)說(shuō)我們也可以使用原生 js 方式或者借用第三方庫(kù)來(lái)實(shí)現(xiàn)參數(shù)的獲取并對(duì)象化,下面就對(duì)具體用法進(jìn)行介紹整理。
方法1: 字符串 split 方法
因?yàn)橐粋€(gè) url 地址是字符串形式的,所以利用 split 方法將參數(shù)提取出來(lái),該方法比較常用,而且容易理解(對(duì)于不太會(huì)使用正則的我來(lái)說(shuō),haha~)
let URL = "http://www.baidu.com?name=張三&age=25&sex=男&wife=小紅" function getUrlParams(url) { // 通過(guò) ? 分割獲取后面的參數(shù)字符串 let urlStr = url.split('?')[1] // 創(chuàng)建空對(duì)象存儲(chǔ)參數(shù) let obj = {}; // 再通過(guò) & 將每一個(gè)參數(shù)單獨(dú)分割出來(lái) let paramsArr = urlStr.split('&') for(let i = 0,len = paramsArr.length;i < len;i++){ // 再通過(guò) = 將每一個(gè)參數(shù)分割為 key:value 的形式 let arr = paramsArr[i].split('=') obj[arr[0]] = arr[1]; } return obj } console.log(getUrlParams(URL))
方法2: 利用 URLSearchParams 方法
在 MDN 中結(jié)合兩種方法實(shí)現(xiàn)參數(shù)的獲?。?. 使用 new URLSearchParams(url)
方法,返回一個(gè) URLSearchParams 對(duì)象,再調(diào)用 entries()
方法返回一個(gè)可迭代對(duì)象(Iterator);2. 使用 Object.fromEntries(iterable)
方法轉(zhuǎn)化為普通對(duì)象
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))
特別的:URLSearchParams 方法不僅可以獲取參數(shù),還可以將參數(shù)對(duì)象轉(zhuǎn)為 字符串,詳細(xì)用法可查看 MDN 中的介紹,并且該方法存在瀏覽器兼容性問(wèn)題。
方法3: 利用正則匹配方法
正則匹配功能強(qiáng)大相信很多小伙伴都知道,不僅可以實(shí)現(xiàn)在登錄注冊(cè)時(shí)的賬號(hào)、密碼、郵箱、手機(jī)號(hào)等等的驗(yàn)證,還可以非常方便的處理一些字符串(校驗(yàn)、替換、提取等操作),難點(diǎn)在于對(duì)正則使用的熟練度,這里就是通過(guò)正則提取字符串中需要的字符
let URL = "http://www.baidu.com?name=Tom&friend=Jerry" function getUrlParams3(url){ // \w+ 表示匹配至少一個(gè)(數(shù)字、字母及下劃線), [\u4e00-\u9fa5]+ 表示匹配至少一個(gè)中文字符 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))
方法4: 使用第三方庫(kù) qs
使用第三方庫(kù) qs 也可以實(shí)現(xiàn) url 中參數(shù)字符的提取,還能實(shí)現(xiàn)將參數(shù)對(duì)象轉(zhuǎn)為 url 參數(shù)形式,需要注意的是瀏覽器 cdn 方式引入時(shí)是默認(rèn)添加到全局對(duì)象 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 庫(kù)時(shí)會(huì)默認(rèn)掛在到全局 window 的 Qs 屬性上 // console.log(window) let urlStr = url.split('?')[1] let result = Qs.parse(urlStr) // 拼接額外參數(shù) let otherParams = { num:50, size:6.1 } let str = Qs.stringify(otherParams) let newUrl = url + str return {result,newUrl} } console.log(getUrlParams4(URL)) </script>
總結(jié):
到此這篇關(guān)于前端JS獲取URL參數(shù)的4種方法的文章就介紹到這了,更多相關(guān)前端獲取URL參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
聊聊JavaScript如何實(shí)現(xiàn)繼承及特點(diǎn)
“繼承”是面向?qū)ο缶幊汤锩娼?jīng)常提及到的概念,它的目的是實(shí)現(xiàn)代碼復(fù)用。這篇文章主要介紹了聊聊JavaScript如何實(shí)現(xiàn)繼承及特點(diǎn),有興趣的可以了解一下。2017-04-04小程序開(kāi)發(fā)?page-container?頁(yè)面容器彈出對(duì)話框功能的實(shí)現(xiàn)
這篇文章主要介紹了小程序開(kāi)發(fā)?page-container?頁(yè)面容器,彈出對(duì)話框,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08js實(shí)現(xiàn)StringBuffer的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇js實(shí)現(xiàn)StringBuffer的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09js實(shí)現(xiàn)倒計(jì)時(shí)關(guān)鍵代碼
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)倒計(jì)時(shí)的關(guān)鍵代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05使用變量動(dòng)態(tài)設(shè)置js的屬性名
js的屬性名可以使用變量,例如js對(duì)象object,當(dāng)賦給該對(duì)象屬性的時(shí)候可以采用以下方式,比較實(shí)用,需要的朋友可以看看2014-10-10javascript數(shù)據(jù)類(lèi)型詳解
本文介紹了對(duì)javascript數(shù)據(jù)類(lèi)型;隱式轉(zhuǎn)換 (+ 和 -,== 和 ===);包裝對(duì)象等相關(guān)知識(shí)進(jìn)行詳細(xì)介紹,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02基于BootStrap Metronic開(kāi)發(fā)框架經(jīng)驗(yàn)小結(jié)【五】Bootstrap File Input文件上傳插件的用法
本文主要基于我自己的框架代碼案例,介紹其中文件上傳插件File Input的使用,非常具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05微信小程序中使用ECharts 異步加載數(shù)據(jù)實(shí)現(xiàn)圖表功能
本文通過(guò)實(shí)例代碼給大家介紹了微信小程序中使用ECharts 異步加載數(shù)據(jù)實(shí)現(xiàn)圖表功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07JavaScript canvas實(shí)現(xiàn)九宮格切圖效果
這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)九宮格切圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09