在处理js代码判断真假时经常会这么写。
//从某个地方获取的值。
var vale = fun(
...
...
...
);
if(!value){
进入这里表示value的布尔值为false
}
我们知道,JavaScript的变量类型时动态的,你无法在运行期之前知道它的数据类型。而if判断语句,是希望括号里的值是布尔值。那么问题来了,当我们没有使用 == 或 === 之类的判断符时,JavaScript会如何判断value的布尔值?
直接公布答案吧:
JavaScript 遇到预期为布尔值的地方(比如if
语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean
函数。因此除了以下五个值,其他都是自动转为true
。
undefined
null
0(+0或-0)
NaN
''(空字符串,空格不算空字符串哟。)
fun()可能得到的可能是以上任何一种值,常常被坑的就是数字0就是false,于是0就被无情的当做false了。
还有一种常见的坑就是,Boolean("false") 和 new Boolean(false)(注意不是 Boolean(false)) 的布尔值是什么?
很多小伙伴会毫不犹豫的说,false啊!恭喜您中招了,请自行写代码试试,看看返回的值是什么!
已经被这些坑过N回了,作为一个后端人的我,做个记录,以防再被坑。