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

if的判断

  • . 原理 对于括号里的表达式类型,会被强制转换为布尔类型
  1. 对于类型为Undefined,转换为false
  2. 对于类型为Null,转换为false
  3. 对于类型为Boolean,直接判断
  4. 对于类型为Number+0、-0、0.00NANfalse,其他为true
  5. 对于类型为String,空字符串为false,其余为true
  6. 对于类型为Object,转换为true
  • 几个例子
  1. if ("hello") { console.log("hello") } 输出hello
  2. if ("") { console.log('empty') } 输出undefined
  3. if (" ") { console.log('blank') } 输出blank
  4. if ([0]) { console.log('array') } 输出array
  5. if('0.00'){ console.log('0.00') } 输出0.00

==的判断

  • . 原理
    对于==两侧的xy,判断其是否相等,有如下原理。
  1. x类型为nullyundefined,结果为true
  2. x类型为numbery类型为string,均会将y转化为数字,式子转换为x==toNumber(y)
  3. x类型为Boolean,y类型不限,也均会转化为数字,式子转换为toNumber(x) ==y
  4. x类型为Objecty类型为StringNumber,会将对象转换为字符串或数字,式子转换为toPrimitive(x) ==y
  • 转化为数字的情况
  1. Undifined转化为NaN
  2. Null转化为0
  3. Booleantrue转化为1,false转化为0
  4. 字符串 "abc"转化为NaN"123"转化为123,空字符串空白字符串均转化为0
  • 对于对象类型,先尝试调用valueOf方法获取结果,没有定义的话再尝试调用toString方法获取结果
  • 几个例子
  1. "" == 0 结果为true
  2. " " == 0 结果为true
  3. "" == true 结果为false
  4. "" == false 结果为true
  5. " " == true 结果为false
  6. !" " == true 结果为false
  7. !" " == false 结果为true
  8. "hello" == true 结果为false
  9. "hello" == false 结果为false
  10. "0" == true 结果为false
  11. "0" == false 结果为true
  12. "00" == false 结果为true
  13. "0.00" == false 结果为true
  14. undefined == null 结果为true
  15. true=={} 结果为false
  16. [] == true 结果为false
  • 对于var obj = { a: 0, valueOf: function(){return 1} }
  1. obj == "[object Object]" 结果为false
  2. obj == 1 结果为true
  3. obj == true 结果为true

你可能感兴趣的:(关于if(xx)和a==b的判断)