相等(==)、恒等(===)、if(xx)那些事

134 阅读1分钟

相等操作符 

  • 相等==和不相等!=对比不同类型会强制转换数据类型,然后再比较

恒等操作符

  • 恒等(===)和不恒等(!==)比较值和数据类型

if(xx)

  • if语句的条件部分会将非布尔值的参数自动转换为布尔值,系统内部会自动调用Boolean函数

if(xx)基本规则

相等和不相等操作符遵循下列规则

  • null和undefined是相等的
  • NaN不相等于NaN
  • 如果一个值是number,一个是string,先Number(String)然后比较
  • 如果一个值是boolean,Number(true/false),则将其转为1/0比较
  • 如果一个值是object,一个是数字或字符串,则调用对象的valueOf()方法,则尝试使用valueOf和toString转换后比较

特殊情况

null == undefined //true
"NaN" == NaN //false
5 == NaN //false 
NaN == NaN //false 
NaN != NaN //true 
false == 0 //true 
true == 1 //true 
true == 2 //false 
undefined == 0 //false 
null == 0 //false 
"5" == 5 //true 

// object
{} == true  // false
[] == true  //false
var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"  //false
obj == 1  //true
obj == true  //true

// string
1==true; //true,因为true转换为1
0==false; //true ,因为false转换为0
"0" == true  //false
"0" == false  //true
"00" == false  //true
"0.00" == false  //true