老师请问一下,这节老师这个举例的BUG还怎么补呀?要是地址字符串最后出现两个以上的问号该怎么去写?

来源:2-1 includes()

帅得无心敲代码

2021-02-28 00:06:41

<!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>Document</title>
</head>
<body>
<script>
const imooc = 'https://www.imooc.com/course/list??';
const addURLParam = (url,name,value) => {
let arrStr = [...imooc].slice(0,33).join('');
arrStr += arrStr.includes('?')?'&':'?';
return arrStr += `${name}=${value}`;
}
console.log(addURLParam(imooc,'c','fe'));
console.log(addURLParam(imooc, 'sort', 'pop'));
</script>
</body>
</html>


写回答

1回答

好帮手慕久久

2021-02-28

同学你好,解答如下:

1、如果地址栏后面是问号结尾,可以如下这样处理:

   <script>
        const imooc = 'https://www.imooc.com/course/list?name=a&';
        const addURLParam = (url, name, value) => {
            // 先判断是否有 问号
            if (url.includes('?')) {  //如果有问号
                if (url.substr(url.length - 1, 1) === '?' || url.substr(url.length - 1, 1) === '&') {   //如果地址后面是? 或者 &
                    // 就加个空字符串
                    url += ''
                } else { 
                    // 否则,就直接加上&
                    url += '&'
                }
            } else {
                // 没有问号 就加上?
                url += '?'
            } 
            return url += `${name}=${value}`;
        }
        console.log(addURLParam(imooc, 'c', 'fe'));
        console.log(addURLParam(imooc, 'sort', 'pop'));
    </script>

2、我们不考虑地址出现“??”的情况,只考虑输入的地址形式是正确的。即只考虑如下三种形式即可:

没有?、&:https://www.imooc.com/course/list

?后面,还有内容:https://www.imooc.com/course/list?name=a

?后面的内容中有&:https://www.imooc.com/course/list?name=a&

由于用户输入的地址形式是不确定的,我们没办法用一个方法将各种情况都考虑到。所以通常情况下,我们写的方法,只针对其中几种情况进行处理。或者让后端人员,在用户输入的地址不符合要求时,提示用户“请输入正确的地址”。

同学写的方法是可以处理“??”的情况的,只是可以优化一下,如下:

http://img.mukewang.com/climg/603afeee09489f0108260397.jpg

祝学习愉快!

0

0 学习 · 15276 问题

查看课程