浅谈空值的校验

848 阅读2分钟

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」。


前言

在业务中,我们肯定需要对上游数据做合法校验,其中一个很重要的校验就是空值校验(纵使上游完全由我们控制,或者数据由非常可靠的服务返回,我们依旧要将其视为不可信赖的)

在大部分场景我们需要判断的是假值或者是数据空值(包括空字符串、空对象和空数组)

这里我们浅谈一下在代码中,如何判断空值比较好

有哪些空值

我们常规认为的空值即为隐式转换之后为false值的,还有显式表现的空字符串、空对象和空数组,举例以下大致有:

NaNundefinednullfalse0''[]{}

如何判断

条件语句 if

通常我们会直接使用 if 使其进行隐式转化Boolean值。对于前面6中数据,用if进行隐式转换是没问题的,但是对于空数组、空对象,用if并不好使,所以我们通常用一些特殊的方法来判断空数组和空对象

通常通过 数组长度 判断是否为空数组,用 JSON.stringify 判断是否为空对象

可能刚刚入行不久的同学会说,能不能用:

if([] == [])
if({} =={})

来进行数组和对象的空值判断,试试就知道能不能咯(原因和引用型数据存储方式有关

位运算的小技巧

可能有同学说这样判断太麻烦啦,有没有啥方便点点点的法子。其实也是有的,懒惰是人类进步的源泉嘛,能偷懒就偷懒,那就是引用 按位非运算符 了。传送门:MDN关于按位非运算符的解释

按位非运算,简单的说就是取反(其实这个是大学计算机组成原理课程上的知识?) 关于按位非运算符的知识,可以自行查阅资料,这块的知识点还是挺多,这里分享一篇文章,个人感觉还行: JS按位非(~)运算符与~~运算符的理解分析

如果只取一次反,那岂不是要反了?正是,所以一般我们会调用两次按位非运算符取两次反

看下例子:

image.png

可以说一目了然了,当然,可能有些同学的服务是通过 code === 0 来作为 状态码200 响应的,这个时候特殊处理一下就可以了