基本使用方法如下

/*
* URLSearchParams属性
* @语法:new URLSearchParams(parameter);
*/
(function(){
var str = "http://www.domain.com/?user=Alan&id=123&id=456";
var searchParams = new URLSearchParams(str);
// let...of 语法(迭代对象)
for(let p of searchParams){
// console.log(p);
}
/*
* URLSearchParams.append()
* @添加新的key/value到URL中
*/
searchParams.append("city", encodeURIComponent("深圳")); /*
* URLSearchParams.has()
* @查询是否存在,返回一个boolean值
*/
searchParams.has("id"); // true
/*
* URLSearchParams.get()
* @返回相关联的第一个值
*/
searchParams.get("id"); // /*
* URLSearchParams.getAll()
* @返回所有相同key的值
*/
searchParams.getAll("id"); // ["123", "456"] /*
* URLSearchParams.set()
* @设置key的value值,如果有多个,删除其他的
*/
searchParams.set("id", "789"); /*
* searchParams.delete()
* @删除所有参数列表key与value值,重复的key都被删除
*/
searchParams.delete("id"); /*
* searchParams.entries()
* @返回所有键值对key/value
*/
for(let pair of searchParams.entries()){
console.log(pair[0]+ ', '+ pair[1]);
} /*
* searchParams.keys()
* @返回所有键key
*/
for(let key of searchParams.keys()){
console.log(key);
} /*
* searchParams.values()
* @返回所有值
*/
for(let value of searchParams.values()) {
console.log(value);
} /*
* searchParams.toString()
* @返回修改过的URL
*/
searchParams.toString();
console.log(searchParams.toString());
}());

JS 编写函数从下面的 URL 串中解析出所有的参数

http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&d&enabled

期望的返回结果格式如下:

{
user: 'anonymous',
id: [123, 456], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
city: '北京', // 中文
enabled: true, // 未指定值的 key 约定值为 true
}

谋定而后动,动手前一定要搞清楚问题。怎样才算是把问题搞清楚了?要清楚输入的特征,是否会出现各种奇怪的输入

防御性编程,检测是否为字符串

function parse(str){
if(typeof str !== "string"){
return;
}
var paramObj = {};
var decode = decodeURIComponent(str); // 先解码
var parsePart = decode.split("?#")[decode.split("?#").length-1]; // 截断不需要部分
var paramArr = parsePart.split("&");
for(var i = 0; i < paramArr.length; i++){
var tmp = paramArr[i].split("=");
var key = tmp[0];
var value = tmp[1] || true; // console.log("关键字是:" + key, "值是:" + value);
if(typeof paramObj[key] === "undefined"){
paramObj[key] = value;
}else{
var newValue = paramObj[key] + "," + value; // 有多个重复的先连接字符串,然后才分割开
paramObj[key] = newValue.split(",");
}
}
// console.log(paramObj);
}

URLSearchParams 接口定义处理 URL 参数串的更多相关文章

  1. URLSearchParams接口用来处理浏览器的url

    URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串. URLSearchParams.append()插入一个指定的键/值对作为新的搜索参数. URLSearchPa ...

  2. URLSearchParams 接口

    URLSearchParams 接口定义了很多个用来处理 URL 参数串的方法 他可以把对象转变成url上面查询信息的写法,例如a=1&b=2 可以把请求路由中的字符串   key=1 ,拼接 ...

  3. C语言定义从URL中获取键值的接口

    环境:centos7下,对客户端http请求进行解析,来获取有效键值(包括汉字). 头文件 /* 这是一份关于从Http请求信息中提取键值的接口声明的头文件 */ #ifndef _HEAD_H_ # ...

  4. 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)

    定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...

  5. Thymeleaf 之 内置对象、定义变量、URL参数及标签自定义属性

    Thymeleaf 之 内置对象.定义变量.URL参数及标签自定义属性 本文章来自[知识林] 如标题所述,这篇文章主要讲述Thymeleaf中的内置对象(list解析.日期格式化.数字格式化等).定义 ...

  6. 使用jquery获取url及url参数的方法及定义JQuery扩展方法

    1.jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javascript的基础的window对象,并没有用jquery的知识. 2.jquery获取 ...

  7. [开发笔记]-使用jquery获取url及url参数的方法

    使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javasc ...

  8. 使用jquery获取url及url参数的方法

    使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javasc ...

  9. CDN页面刷新接口定义[高升]

    一 . 任务 分发 工作流程步骤 1. 合作方按照高升定义的 json 数据格式向高升分发接口 post 任务,高升分发接口会根据接收情况即时反馈接收成功还是失败的结果.二 . 高升 分发 接口 定义 ...

随机推荐

  1. /usr/include/glib-2.0/glib/gtypes.h:34:24: fatal error: glibconfig.h: No such file or directory

    cc -DDEBUG -mtune=core2 -O2 \ -onvideo nvideo.c \ -I/usr/include/atk-1.0 \ -I/usr/include/cairo \ -I ...

  2. 让PHP7达到最高性能的几个Tips

    PHP7 已经发布了,作为PHP十年来最大的版本升级,最大的性能升级,PHP7在多放的测试中都表现出很明显的性能提升,然而,为了让它能发挥出最大的性能,我还是有几件事想提醒下. PHP7 VS PHP ...

  3. R语言数据的导入与导出

    1.R数据的保存与加载 可通过save()函数保存为.Rdata文件,通过load()函数将数据加载到R中. > a <- 1:10 > save(a,file='d://data/ ...

  4. 无限级分类 mysql设计

  5. relation 关联模型

    关联关系必然有一个参照表,例如:有一个员工档案管理系统项目,这个项目要包括下面的一些数据表:基本信息表.员工档案表.部门表.项目组表.银行卡表(用来记录员工的银行卡资料).这些数据表之间存在一定的关联 ...

  6. 矩阵分解(Matrix Factorization)与推荐系统

    转自:http://www.tuicool.com/articles/RV3m6n 对于矩阵分解的梯度下降推导参考如下:

  7. CMutex、CCriticalSection、CSemaphore、CEvent、WaitForSingleObject 的小例子

    一.CMutex CMutex mutex; mutex.Lock(); // 互斥的动作 // mutex.Unlock(); 二.CCriticalSection CCriticalSection ...

  8. 用C语言显示汉字的演示程序

    汉字是方块字,宽高相等的汉字库在嵌入式领域有着广泛的应用,且其解析也相对来说是比较简单的.汉字在汉字库中的索引一般会遵循GB2312/GBK编码规则,GB2312/GBK规定汉字编码由2个字节组成,其 ...

  9. c++ json cpp

    一 编译链接 1 在相应官网下载jsoncpp 2 解压得到jsoncpp-src-0.5.0文件 3 打开jsoncpp-src-0.5.0 -> makefiles -> vs71 - ...

  10. 【ML】概率图模型

    http://wenku.baidu.com/link?url=-Fa32JAnvwS8fyWgdPjYLNGvmor42lWCT6N7TehNQAnx4ZVmJtC0L0SgnaLtEFMB9Gzw ...