[转]JavaScript 的if()语句和==的判断
原文地址:JavaScript 的if语句和==的判断 - 系佛 - 博客园
一. if(xx)的判断
JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。
1.当if括号里面的表达式为Boolean时,直接判断
if (true){ console.log("true"); //true } if (false){ console.log("true"); //false }
2.当if括号里面的表达式为Number时,分两种情况,当number为+0,-0,NaN的时候,为false;其他为true。
if(0){ console.log("true"); //false } if(NaN){ console.log("true"); //false } if(1){ console.log("true"); //true }
3.当if括号里面的表达式为String时,空字符串为false,其他为true;
if(""){ console.log("true"); //false } if("abc"){ console.log("true"); //true }
4.当if括号里面的表达式为Undefined时,为false;
if(Undefined){ console.log("true"); //false }
5.当if括号里面的表达式为null时,为false;
if(null){ console.log("true"); //false }
toBoolean
类型 | 结果 |
---|---|
undefined | false |
null | false |
Boolean | 直接判断 |
string | ""(空字符串)为false,其他为true |
Object | true |
Number | +0,-0,Nan为false,其他为true |
二. a==b的判断
==是比较两个值是否相等,相同类型直接比较,不同类型的话,看情况转换。
- String==Number --->toNumber(String)==Number
"" = 0 ; //true,因为“”转换为0 " " = 0 ; //true "hello" == 1 //false ,因为"hello"转换为NaN "hello" == 0 //false,同理
- Boolean==(any) --->toNumber(Boolean)==(any)
1==true; //true,因为true转换为1 0==false;//true ,因为false转换为0 "0" == true //false "0" == false //true "00" == false //true "0.00" == false //true
- Object==String/Number---->toPrimitive(Object)
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结
果
{} == true // false [] == true //false var obj = { a: 0, valueOf: function(){return 1} } obj == "[object Object]" //false obj == 1 //true obj == true //true
- null==undefined,//true
- ==知识点
如果两个值类型相同,则执行严格相等的运算
如果两个值的类型不同
如果一个是null,一个是undefined,那么相等
如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
如果一个值是true/false则将其转为1/0比较
如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
其它就不相等了
toNumber
类型 | 结果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture->1,false->0 |
String | (""-->0, " "-->0 )空字符串与空白字符串转换数值0,abc"->NaN,"123"->123 |