JS的逻辑判断值

导语

我们经常在做逻辑判定时会根据判定值的布尔类型来区分操作,即如果是··则··,不然则··的逻辑语境,但由于Js的弱类型特性,它可以利用不同类型的值来替代布尔值。如:

if(!false){}, 
if(!""){},
if(!undefined){},
if(!null){},
if(!0){}

效果相同。
但是,这里面又有哪些陷阱呢?

这些值是否都相等

这些值中

0 == false    //true
"" == false   //true
"" == 0       //true

false == undefined   //false
false == null        //false
null == undefined    //true

从上面我们可以看出,虽然 0/false/“”/null/undefined 可以充当相同的布尔角色,但是它们却不能在值上相等。只有 0,false,””值相等,undefined与null值相等,其他不相等。

为什么会这样?

这里在JS运行时的认定机制我也不是特别清楚,我大概知道Js在这里做了一些不严谨的类型转换,所有的值都会被转换为两个值 : false 与true,再执行代码。

备注

由于if语句经常用到,这几种情况还是记下来比较好。