导语
我们经常在做逻辑判定时会根据判定值的布尔类型来区分操作,即如果是··则··,不然则··的逻辑语境,但由于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语句经常用到,这几种情况还是记下来比较好。