乐趣区

关于javascript:void0与undefined-与特殊运算符

前景介绍:

在刷题的时候遇到一个题目, 也学习了其余大佬的实现形式, 在此记录一下作为学习和分享.

题目形容

获取 url 中的参数

  1. 指定参数名称,返回该参数的值 或者 空字符串
  2. 不指定参数名称,返回全副的参数对象 或者 {}
  3. 如果存在多个同名参数,则返回数组
  4. 不反对 URLSearchParams 办法

    举例
    输出:http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
    输入:[1, 2, 3]
    实现
    function getUrlParam(sUrl,sKey){var paramArr = sUrl.split('?')[1].split('#')[0].split('&'); // 取出每个参数的键值对放入数组
     const obj = {};
     paramArr.forEach(element => {const [key, value] = element.split('=');  // 取出数组中每一项的键与值
     if(obj[key] === void 0){   // 示意第一次遍历这个元素,间接增加到对象下面
     obj[key]=value
     } else{obj[key]=[].concat(obj[key],value); // 示意不是第一次遍历阐明这个键已有,通过数组存起来。}});
     return sKey===void 0 ? obj : (obj[sKey]||'') 
     
     console.log(getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test1=4#hehe')) // {key:['1','2','3'],test1:'4' }
    }
    
解析

这里 void 0 的用法对于我的承受还是比拟新的, 于是就查了一下代表的是什么意思,
在 MDN 的 undefined 的介绍中讲到其实就是所 void 0 是 undefined 的一种代替计划,
void 0 === undefined的后果是 true.
其实 void 关键字不是第一次呈现了, 还有一下集中应用形式:

return sKey===void 0?obj:obj[sKey]||''
void 0===undefined 判断为 true
上式判断函数中是否传入了 sKey 参数,如果传入了取后值,未传入取前值
?? 是合并运算符,当值不为 undefined 和 null 时,取前值,否则去后值

<-- 阻止连贯的跳转 : 死链接 -->
<a href="javascript:void(0)"> 点击 </a>
<a href="javascript:void(alert(' 哈哈哈 '))"> 点击 </a>
题外话

好忘性不如烂笔头, 在记录 void(0)的时候顺便又想起其余几个比拟非凡的逻辑操作符, 在这里也在啰嗦一下

??(空值合并操作符)
   空值合并操作符当左侧的值不为 `null 和 undefined` 的时候才会返回右侧的值, 否则返回左侧的值.
|| (逻辑或运算符)
逻辑或运算符当左侧的值为假时就会返回右侧的值, 否则返回左侧的值.
?.(可选链操作符)
相似于 `.` 操作符, 然而区别在与当他的援用为空的 (`null 和 undefined`) 时候, 不会引起谬误.
&& (逻辑与)
逻辑与运算符须要左右两侧的值都为真时才会显示为真, 否则为假.
结束语

这里记录的可能不是很残缺, 包含如果有些形容的不精确的中央, 欢送和心愿大家帮忙指出, 一起学习提高

退出移动版