JavaScript 取得 URL 的 params
使用情境
- 前端需要根據 URL 上的 params 來處理對應的操作
- 關鍵字:javascript get url params
- 關鍵字:How can I get query string values in JavaScript?
三種方式筆記
- Vanilla JavaScript
- URLSearchParams
- Proxy
Vanilla JavaScript
function getParameterByName(name, url = window.location.href) {
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
使用方式:
// query string: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)
URLSearchParams
使用 URLSearchParams,不過此方式可能需要留意下瀏覽器的支援程度 caniuse
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');
如果你需要一次取得全部 params 的資料了話,可以使用下面方式:
const urlSearchParams = new URLSearchParams(window.location.search);
const params = Object.fromEntries(urlSearchParams.entries());
Proxy
使用 Proxy 的效能會比直接使用上面使用 Object.fromEntries() 的效能好一些,可以參考此 JSBEN.CH
const params = new Proxy(new URLSearchParams(window.location.search), {
get: (searchParams, prop) => searchParams.get(prop),
});
// Get the value of "some_key" in eg "https://example.com/?some_key=some_value"
let value = params.some_key; // "some_value"
參考來源:
stackoverflow how-can-i-get-query-string-values-in-javascript