js的弱类型让人感觉很多东西都比较迷惑,例如变量在if条件中到底是true还是false,如果在强类型语言中将一个非boolean类型的变量放在if条件中时,是需要进行类型转换的,但是js不需要,下面来进行测试,测试常见的变量类型在if条件中的表现
!function test1(){
<span style="color:#ff0000;">var a,b=-1,c= 1,d= 0,e=null,f=undefined,g='',h="";</span>
if(!a){
console.log('a='+a)
}
if(!b){
console.log("b="+b)
}
if(!c){
console.log("c="+c)
}
if(!d){
console.log("d="+d)
}
if(!e){
console.log("e="+e)
}
if(!f){
console.log("f="+f)
}
if(!g){
console.log("g="+g)
}
if(!h){
console.log("h="+h)
}
}()
设定了各种变量类型,分别放入if条件中
执行结果
a=undefined
d=0
e=null
f=undefined
g=
h=
i=false
可以比较清晰的看到,当变量声明但未定义、为0、为null、为undefined、为空字符串时if均当作false进行处理。
我认为(未查证)if条件中的表达式会执行一次Boolean(value);方法,得到表达式中的值
其中value值如果是任何非空字符串,非零的数字值,非null对象,均转换为true,其他均为false
所以上面的现象就不难解释