js中一种常见条件判断if(var)的坑

在处理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回了,作为一个后端人的我,做个记录,以防再被坑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值