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

关于if的判断

if(xx){ }

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

原理
  • 未赋值的变量(已定义)为假
  • 赋值为空字符串的变量为假,字符串中有字符(包括空格)即为真.
  • 赋值为true即为真,false则为假
  • 赋值为0为假,其他数值则为真
  • 特殊值null,undefined都为假
  • 已定义的函数(不带括号),定义了就是真,没有定义会报错
  • 已定义的函数(带括号),根据函数返回值判断真假(函数如果没有定义返回值,则返回值是undefined,假)
  • 已定义的对象,未赋值时为假,赋值后为真.
  • 已定义的对象的属性字段,数值型为0时是假,其他为真,字符串型是为空值时是假,其他为真。
  • 已定义的对象的方法,和单独的函数是一样
类型 结果
undefined false
null false
boolean 直接判断
number +0,-0,或者NaN为false,其他为true
string 空字符串为false,其他都为true
object true

关于==的判断

相等操作符比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。 相等操作符满足交换律。详细:(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness)

全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换。如果两个被比较的值具有不同的类型,这两个值是不全等的。否则,如果两个被比较的值类型相同,值也相同,并且都不是 number 类型时,两个值全等。最后,如果两个值都是 number 类型,当两个都不是 NaN,并且数值相同,或是两个值分别为 +0 和 -0 时,两个值被认为是全等的。

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 true->1,false->0
string "abc"->NaN,"123"->123
toPrimitive

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

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