if的条件默认Boolean和 == 的隐式类型转换

-1 == true 还是 -1 == false ?

正在我纠结的时候,试了下1 == true 和 2 == true

紧接着,做了下面的测试

为什么 2 == true 是false, 但是if (2){}却成立呢

if 条件语句的隐式类型转换

在做 == 运算的时候,会有如下转换规则:

  • 一、首先看双等号前后有没有NaN,如果存在NaN,一律返回false。
  • 二、再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)
  • 三、接着看双等号前后有没有字符串, 有三种情况:
    • 1、对方是对象,对象使用toString()或者valueOf()进行转换;
    • 2、对方是数字,字符串转数字;(前面已经举例)
    • 3、对方是字符串,直接比较;
    • 4、其他返回false
  • 四、如果是数字,对方是对象,对象取valueOf()或者toString()进行比较, 其他一律返回false
  • 五、null, undefined不会进行类型转换, 但它们俩相等

这可以解释为什么 1 == true成立,2 == true不成立。但是 if(2){}成立又是怎么算的呢

if(2){}成立,先对if 的条件进行了一次布尔值转换Boolean(2)

随机浏览