方法一:
在 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環境和需要的復雜度來進行選擇
作者:yuzhihui
出處:http://www.cnblogs.com/yuzhihui/ 宣告:歡迎任何形式的轉載,但請務必注明出處!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/541697.html
標籤:其他
