这两种主要是对《Prototype浅析》先前略过的String部分中toQueryParams和Object部分的toQueryString方法的补充
一、从URL中提取参数
有下列字符串:
1 | var linkURL = 'http://localhost:8080/String/string_6.html?昵称=小西山子&age=24#id1'; |
对于一个真实的URL地址,可以用js来读取location中的相关信息来获得某些信息,下面列举一些:
1 | location.origin : http://localhost【域】 |
其中,与从URL中提取参数主要是用到location.search。不过为了通用,我们不去读取location.search,直接处理字符串。
提取字符串查询字符串之后,转化为对象的形式。
先讨论几种查询字符串的情况:
- ?昵称=小西山子&age=24#id1 –>{昵称:’小西山子’,age:’24’}
- ?昵称&age=24#id1’; –>{昵称:undefined,age:’24’}
- ?=小西山子&age=24#id1 –>{age:’24’}
- ?昵称=小西山子=又一个&age=24&age=24#id1 –>{昵称:’小西山子=又一个’,age:[‘24’,’24’]}
1 | function toQueryParams(){ |
二、对象转换为URL查询参数
对象转换为URL查询参数就麻烦一点。不过由于是转换成查询参数形式,因此只能处理单层嵌套的对象,子对象就不能处理了。其原理就是toQueryParams的反向操作。
1 | function toQueryPair(key, value) { |
真实源码中用的是inject方法,不过在Enumerable部分,因此上面作了替换。