if(变量===null){}并不是false,因为看的是他们是否相等,而不是先把null转化为了false,所以if(变量===0){}是不一样的。
注意:{}是一个对象,只是么有键值对,null是一个空对象引用。
1.等值符== 类型转换规则:如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字进行比较。而其他值都不能转化为数值,如“hh”,所以与数值比较的话会是false。
- true转为1,false转为0
- “123”转为123
- 123就是123
- 并且“01”和“1”是同一类型,所以不会进行转换为数字,所以两者比较为false
2.流控制语句如if语句,会自动执行相应的Boolean转换,如不进行Boolean转换的话,{}是不等于true的,{}任然属于对象,而null是一个空对象引用。
let a={};
if(a){
//会执行这里的语句
}
alert(Boolean(a)==true);//ture
alert(a==true);//false
let a= {};
alert(Boolean(a)==null);//f,类型不同,值不同,所以false
alert(Boolean(null));//f,非对象,所以false
alert(a==null);//f,类型相同,但是引用不同,所以false
alert(Boolean(a));//t
let a={b:1};//a指向一个对象引用,在栈中保存着一个地址引用
a={};//a指向一个没有键值对的对象引用,且断开与之前的引用,重新保存一个新的地址引用
a=null;//a指向一个空对象引用,且断开与之前的引用,不保存新的地址引用。