JavaScript?中URL?查詢字符串(query?string)的序列與反序列化的方法
方法一:
在 JavaScript 中,可以使用 URLSearchParams 對象來處理 URL 中的查詢字符串。
序列化(將 JavaScript 對象轉(zhuǎn)換為查詢字符串)可以使用 URLSearchParams 對象的 append() 方法,如下所示:
let params = new URLSearchParams();
params.append('name', 'John');
params.append('age', '30');
let queryString = params.toString();
console.log(queryString); 反序列化(將查詢字符串轉(zhuǎn)換為 JavaScript 對象)可以使用 URLSearchParams 的構(gòu)造函數(shù),如下所示:
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 對象只能用于處理查詢字符串,而不能用于創(chuàng)建或解析整個 URL。
如果需要更高級的處理方式,可以使用其它庫或第三方函數(shù)庫,比如 qs, querystring 等庫來處理。
對于反序列化的操作中的URLSearchParams的使用還有一些方法,比如:
has(name): 返回一個 Boolean 值,表示是否存在名稱為 name 的查詢參數(shù)。get(name): 返回名稱為 name 的查詢參數(shù)的值,如果不存在,則返回 null。getAll(name): 返回所有名稱為 name 的查詢參數(shù)的值組成的數(shù)組,如果不存在,則返回空數(shù)組。set(name, value): 設(shè)置名稱為 name 的查詢參數(shù)的值為 value。如果已經(jīng)存在同名參數(shù),將會覆蓋原來的值。append(name, value): 添加名稱為 name 的查詢參數(shù),并設(shè)置其值為 value。如果已經(jīng)存在同名參數(shù),會添加一個新的參數(shù)。delete(name): 刪除名稱為 name 的查詢參數(shù)。entries(): 返回一個迭代器,遍歷所有查詢參數(shù)的鍵值對。keys(): 返回一個迭代器,遍歷所有查詢參數(shù)的名稱。values(): 返回一個迭代器,遍歷所有查詢參數(shù)的值。
這些方法都能給出更靈活的操作,請根據(jù)具體需求來選擇使用
方法二:
當(dāng)然,如果需要手動處理查詢字符串,也可以使用 JavaScript 的標(biāo)準(zhǔn)字符串處理函數(shù)來實現(xiàn)。
序列化,可以使用下面的代碼把一個對象轉(zhuǎn)換為查詢字符串:
function objectToQueryString(obj) {
return Object.entries(obj).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');
}
console.log(objectToQueryString({name: 'John', age: '30'}))反序列化,可以使用下面的代碼把查詢字符串轉(zhuǎn)換為一個對象:
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 來編碼和解碼查詢字符串中的字符,以防止出現(xiàn)無效或不安全的字符。
這些方法都能達(dá)到相同的目的,你可以根據(jù)項目中使用的JavaScript環(huán)境和需要的復(fù)雜度來進(jìn)行選擇
到此這篇關(guān)于JavaScript 中URL 查詢字符串(query string)的序列與反序列化的文章就介紹到這了,更多相關(guān)js url查詢字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實現(xiàn)復(fù)制粘貼剪切功能三種方法
這篇文章主要給大家介紹了關(guān)于JavaScript實現(xiàn)復(fù)制粘貼剪切功能的相關(guān)資料,在實際案例的操作過程中,不少人都會遇到這樣的開發(fā)需求,文中通過代碼將三種方法介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
關(guān)于JavaScript中forEach和each用法淺析
這篇文章主要給大家介紹了關(guān)于JavaScript中forEach和each使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
在線編輯器的實現(xiàn)原理(兼容IE和FireFox)
在線編輯器的實現(xiàn)原理(兼容IE和FireFox)...2007-03-03
對比分析Django的Q查詢及AngularJS的Datatables分頁插件
通過本文給大家對比分析了Django的Q查詢及AngularJS的Datatables分頁插件,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02

