今天我们聊聊Javascript中的假值问题,废话不多说,我们先来看一道关于假值的笔试题:
如果你对每个打印的值都很确定,且全都正确,那么你可以不用继续往下看了。如果不是,请继续往下看。
1.什么是假值
假值:我们将经过toBoolean操作后返回false的值叫做假值。
上面的代码中,if判断语句就隐式的将数组中的每个元素做了一次toBoolean操作。
实际工作中还会用到判断真假的语句有以下几种:
- if语句
- while语句
- for的第二个语句
注意点:对假值以外的值进行toBoolean转换时都会返回true。
2.假值有哪些?
Javascript中主要有以下6个假值:undefined、null、0、false、NaN、'';
toBoolean操作具体的返回值请看下面这张ES6规范文档中的截图:
看完这张图我们再回看上面的题目,答案就很清晰了。
3.注意与“==”运算符的区别
使用“==”运算符和上面说的直接判断真假会有所区别,千万不要混淆。因为“==”运算符进行的是数值运算,也就是说是使用toNumber操作。下面通过题目对两者进行解析:
分析:从以上结果可以得到以下结论
- false、0、''、[]相互“==”判断为true,其余为false
- undefined、null相互“==”判断为true,其余为false
- NaN跟自身都不相等,所以永远判断为false
注意:undefined进行toNumber操作后会转换成NaN,因此与其他的都不等。只是按照约定undefined == null判断为true
- 这里着重说一下 false==[] 为什么会返回true,我们上面不是刚说完[]空数组做判断会作为true吗?
- 因为对[]自身进行判断时,进行的是toBoolean操作,根据转换规范,对象返回的都是true。而在对[]进行“==”运算时,进行的是toNumber操作,因此空数组返回的是0,false也转换成了0,因此返回的是true