最近项目组招前端有一道笔试题是这样的:
编写一个函数(parseQueryString)将URL参数解析成一个对象。
该题的关键是要处理特殊字符 ‘?’ ‘&’ ‘=’ ‘#’。
- ‘?’代表后面的字符串全是查询字符串
- ‘&’代表参数分割符
- ‘=’代表参数的名称和值的分隔符,第一个=号后面的部分全部为值
- ‘#’代表后面的部分不会作为请求发送到服务端
例如:
- 正常输入 :
http://localhost/#api?name=wz&age=12
输出 :{name:"wz",age=12}
- 特殊输入 :
http://localhost:8000/api?name=wz=?1&age?=18#=2
输出 :{"name":"wz=?1","age?":"18"}
- 特殊输入 :
""
输出 :{}
代码:
function parseQueryString(url){
var arr;
var res = {};
//#符号之后的值称为hash,都不会加到request请求中去
url = url.split('