实现parseURL

282 阅读1分钟

可以实现区分bool和number

    let url = "https://interview.nowcoder.com/interview/967324/interviewer?code=90rStoTA&confirm=true&num=1987&numm=456123#002233"
    function myurl(url) {
      let a = document.createElement("a")
      a.href = url
      let query = a.search;  //a.search输出?...
      let arr = query.replace('?', '').split("&")
      let result = {}
      for (let i = 0; i < arr.length; i++) {
        if (!arr[i]) continue;
        let s = arr[i].split("=")
        if (s[1] === 'true' || s[1] === 'false') {
          result[s[0]] = Boolean(s[1])
        }
        else if (s[1].search(/^[0-9]+$/g) === 0) {
          result[s[0]] = parseInt(s[1])
        }
        else {
          result[s[0]] = s[1]
        }
      }
      console.log(result)
      return result
    }
    myurl(url)

取完整参数的方法:

function parseURL(url) {
    var a =  document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':',''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function(){
            var ret = {},
                seg = a.search.replace(/^\?/,'').split('&'),
                len = seg.length, i = 0, s;
            for (;i<len;i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
        hash: a.hash.replace('#',''),
        path: a.pathname.replace(/^([^\/])/,'/$1'),
        relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
        segments: a.pathname.replace(/^\//,'').split('/')
    };
}