「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」。
前言
在业务中,我们肯定需要对上游数据做合法校验,其中一个很重要的校验就是空值校验(纵使上游完全由我们控制,或者数据由非常可靠的服务返回,我们依旧要将其视为不可信赖的)
在大部分场景我们需要判断的是假值或者是数据空值(包括空字符串、空对象和空数组)
这里我们浅谈一下在代码中,如何判断空值比较好
有哪些空值
我们常规认为的空值即为隐式转换之后为false值的,还有显式表现的空字符串、空对象和空数组,举例以下大致有:
NaN 、undefined 、null 、false 、0 、'' 、[] 、{}
如何判断
条件语句 if
通常我们会直接使用 if 使其进行隐式转化Boolean值。对于前面6中数据,用if进行隐式转换是没问题的,但是对于空数组、空对象,用if并不好使,所以我们通常用一些特殊的方法来判断空数组和空对象
通常通过 数组长度 判断是否为空数组,用 JSON.stringify 判断是否为空对象
可能刚刚入行不久的同学会说,能不能用:
if([] == [])
if({} =={})
来进行数组和对象的空值判断,试试就知道能不能咯(原因和引用型数据存储方式有关)
位运算的小技巧
可能有同学说这样判断太麻烦啦,有没有啥方便点点点的法子。其实也是有的,懒惰是人类进步的源泉嘛,能偷懒就偷懒,那就是引用 按位非运算符 了。传送门:MDN关于按位非运算符的解释
按位非运算,简单的说就是取反(其实这个是大学计算机组成原理课程上的知识?) 关于按位非运算符的知识,可以自行查阅资料,这块的知识点还是挺多,这里分享一篇文章,个人感觉还行: JS按位非(~)运算符与~~运算符的理解分析
如果只取一次反,那岂不是要反了?正是,所以一般我们会调用两次按位非运算符取两次反
看下例子:
可以说一目了然了,当然,可能有些同学的服务是通过 code === 0 来作为 状态码200 响应的,这个时候特殊处理一下就可以了