咱们常常在作逻辑断定时会根据断定值的布尔类型来区分操做,即若是是··则··,否则则··的逻辑语境,但因为Js的弱类型特性,它能够利用不一样类型的值来替代布尔值。如:code
if(!false){}, if(!""){}, if(!undefined){}, if(!null){}, if(!0){}
效果相同。
可是,这里面又有哪些陷阱呢?类型转换
这些值中co
0 == false //true "" == false //true "" == 0 //true false == undefined //false false == null //false null == undefined //true
从上面咱们能够看出,虽然 0/false/“”/null/undefined 能够充当相同的布尔角色,可是它们却不能在值上相等。只有 0,false,""值相等,undefined与null值相等,其余不相等。block
这里在JS运行时的认定机制我也不是特别清楚,我大概知道Js在这里作了一些不严谨的类型转换,全部的值都会被转换为两个值 : false 与true,再执行代码。undefined
因为if语句常常用到,这几种状况仍是记下来比较好。