解析query
例如:?a=1&a=2&b=hello&c=&d=true
处理成对象 {a: [1, 2], b: ‘hello’, d: true};
将重复的属性处理成数组,更深一点要处理数字类型和布尔类型
function queryHandler (url) {const index = url.indexOf('?');if (index > -1) {const str = url.substr(index + 1);let arr = str.split('&');let obj = {};for (let i in arr) {let item = arr[i].split('=');let key = item[0];let value = item[1];if (value) { // 如果value有值// 处理value的值,number、boolean、string类型value = !isNaN(Number(value)) ? Number(value) : (value === 'true' || value === 'false') ? value === 'true' : value;if (obj[key] === undefined) { // 如果obj中没有这个keyobj[key] = value;} else {if (Array.isArray(obj[key])) { // 判断已有key的value是否为数组obj[key].push(value);} else {obj[key] = [obj[key], value];}}}}return obj;}}
