直接用 slice() 解析 url 查询参数适合轻量无依赖场景,关键定位 ? 和 & 后切分键值对,再用 decodeuricomponent 解码。

直接用 slice() 解析 URL 查询参数,适合轻量、无依赖场景,关键是定位 ? 和 & 的位置,再逐段切出键值对。
定位查询字符串起始位置
URL 查询参数总在 ? 后面。用 indexOf('?') 找到它,再用 slice() 截取后续部分:
- 若没找到
?(返回-1),说明无查询参数,直接返回空对象 - 否则从
index + 1开始切,跳过问号本身
按 & 拆分参数片段
查询字符串是形如 a=1&b=2&c= 的格式。用 split('&') 得到键值对数组后,对每个片段再处理:
- 每个片段用
indexOf('=')找等号位置 - 键 =
slice(0, equalIndex);值 =slice(equalIndex + 1) - 若没等号(如
flag),键为整个片段,值设为空字符串
注意 URL 编码与边界情况
slice() 不解码,所以结果仍是编码后的字符串(如 %20)。如需可读值,后续需调用 decodeURIComponent():
- 键和值都建议分别解码,避免误解(如键含
=或&) - 空值、重复键、多个
=(如a=b=c)需按业务约定处理,slice()本身只负责切分
一个极简实现示例
不依赖正则、不遍历多次,纯靠索引和 slice():
function parseQuery(url) {
const qIndex = url.indexOf('?');
if (qIndex === -1) return {};
const query = url.slice(qIndex + 1);
const result = {};
query.split('&').forEach(pair => {
const eq = pair.indexOf('=');
const key = eq === -1 ? pair : pair.slice(0, eq);
const val = eq === -1 ? '' : pair.slice(eq + 1);
result[decodeURIComponent(key)] = decodeURIComponent(val);
});
return result;
}










