关于if(xx)和 a==b的判断

2018-07-02  本文已影响0人  此人长期不在线

一、if(xx)的判断

对于if括号里的表达式,会被强制转换为布尔类型

类型 结果
Boolean 直接判断
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Undefined false
Null false
Object true
  1. 当if括号里面的表达式为Boolean时,直接判断
if (true){
   console.log("true"); //true
}
  1. 当if括号里面的表达式为Number时,分两种情况,当number为+0,-0,NaN的时候,为false;其他为true。
if (+0){
   console.log("haha"); //false
}

if (NaN){
   console.log("haha"); //false
}

if (1){
   console.log("haha"); //haha
}
  1. 当if括号里面的表达式为String时,空字符串为false,其他为true;
if ("") {
    console.log('empty'); //false
}

if (" ") {
    console.log('blank'); //blank
}

if('0.00'){
  console.log('0.00'); //0.00
}
  1. 当if括号里面的表达式为Undefined时,为false;
if(Undefined){
  console.log("true"); //false
}
  1. 当if括号里面的表达式为null时,为false;
if(null){
  console.log("true"); //false
}
  1. 当if括号里面的表达式为Object时,为true;
if ([0]) {
    console.log('array');  //array
}

二、a==b的判断

在javascript判断两个变量值是否相等,可以使用==操作符 或者===操作符

x y 结果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
otherwise otherwise false

toNumber

type Result
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

toPrimitive

对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

  1. 判断String==Number
"" == 0    //true,因为“”转换为0
" " == 0  //true,同理,会把空字符转换为0
  1. 判断String==Boolean
"" == true   //false,只要有布尔类型,两边都会转换为数字,左边为0
"" == false  //true,同理,左边为0,右边为0
" " == true  //false,左边为0,右边为1
!" " == true     //false,空白字符串取反,先把空字符串转化为布尔类型,为true,取反为false,而右边为true
!" " == false     //true,同理,左边为false,右边为false
"hello" == true     //false,true转化为数字是1,而"hello"转化为数字是NaN
"hello" == false    //false,同理,"hello"转化为数字是NaN,false转化为数字是0
"0" == true     //false,"0"转化为数字是0,true转化为数字是1
"0" == false     //true,同理,"0"转化为数字是0,false转化为数字是0
"00" == false    //true,同理,"00"转化为数字是0
"0.00" == false    //true,同理,"0.00"转化为数字是0
  1. 判断undefined == null,Boolean==Object
undefined == null   //true,比较特殊,undefined和null不转化为数字
true == {}    //false,true转化为数字是1,{}是Object 类型
[] == true  //false,空数组对应的是0
  1. Object==String/Number
var obj = { 
  a: 0, 
  valueOf: function(){return 1}   //返回的值为1
} 
obj == "[object Object]"  //false
obj == 1  //true,obj为1
obj == true  //true,obj为1,true为1
上一篇下一篇

猜你喜欢

热点阅读