JS URL的相关处理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>URL相关</title>
</head>
<body>
    
</body>
<script>
    // ⭕构造查询参数
    const parseParams = new URLSearchParams();
    parseParams.append("name", "贾飞天");
    parseParams.append("age", 48);
    parseParams.append("email", "1358616130+128@qq.com");
    parseParams.append("name", "test");
    const queryUrl = parseParams.toString();
    console.warn(`查询参数为${queryUrl}`);  // name=%E8%B4%BE%E9%A3%9E%E5%A4%A9&age=48&email=1358616130%2B128%40qq.com&name=test

    // ⭕转换查询参数为对象
    const getUrlParamsToObject = (query) => Array.from(new URLSearchParams(query)).reduce((p, [k, v]) => Object.assign({}, p, { [k]: p[k] ? (Array.isArray(p[k]) ? p[k] : [p[k]]).concat(v) : v}), {});
    console.dir(getUrlParamsToObject(queryUrl));
    /*
        age: "48",
        email: "1355930+128@qq.com",
        name: ["贾飞天", "test"]
    */

    // ⭕对URL进行编码,由于encodeURIComponent()方法不会对-_.!~*'()进行编码,因此我们使用.replace()方法手动编码
    const encode = url => encodeURIComponent(url)
                            .replace(/!/g, '%21')
                            .replace(/~/g, '%7E')
                            .replace(/\*/g, '%2A')
                            .replace(/'/g, '%27')
                            .replace(/\(/g, '%28')
                            .replace(/\)/g, '%29')
                            .replace(/+/g, '%20');
    
    // ⭕从URL中获取参数名所对应的桉树值
    const getParamFromUrl = (url, param) => new URLSearchParams(new URL(url).search).get(param);
    const url = "https://www.test.com?name=%E8%B4%BE%E9%A3%9E%E5%A4%A9&age=48&email=1355930%2B128%40qq.com&name=test";
    /*
        因为我们使用的是.getAll(),所以当一个key对应多个value的时候,只会查询第一个
        如果有一个key对应多个value的的情况的话,需要把get(param)给改为getAll(param)
    */ 
    console.log(getParamFromUrl(url, "age"));  // 贾飞天
</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值