js类型隐式转换

189 阅读1分钟

类型转换之 ==

== 规则

1- 如果操作符左右两边是对象类型,当且仅当两者引用相同才相等

const object1 = {"key": "value"}
const object2 = {"key": "value"};

object1 == object2 // false
object2 == object2 // true

2- = null 和 undefined 比较相等,其他操作符一边是 null 或 undefined 一概不等

null == undefined // true
"0" == null; // false
"0" == undefined; // false
false == null; // false
false == undefined; // false 
"" == null; // false
"" == undefined; // false
0 == null; // false
0 == undefined; // false

3- = 操作符两边类型不同时,会在比较之前尝试转换类型,分三种情况

  • 若一边是字符串,另一边是数字时,字符串会先转换为数字类型,Number()
    "0" == 0; // true
    
  • 若含有操作数是Boolean类型时,true则转换为1,false转换为+0
    false == NaN; // false
    false == 0; // true 
    false == ""; // true 
    
  • 若操作数是对象,另一操作数是数字或字符串时,对象则调用toString()或valueOf()方法转换为基础类型再比较
    false == []; // true  0=='' 
    false == {}; // false 0 == '[object Object]' Number()-----> 0 == NaN
    
  • 若操作数有相同的类型,比较规则如下 1.都是string类型时,当且仅当字符完全相同时相等
     ''=='0' // false
    
    2.都是number类型时,当且仅当值相等,若一边有NaN,则为false,+0与-0相等
     false == NaN; // false
     "" == NaN; // false
     0 == NaN; // false
     0 == -0 // true
    
    3.如果两者都是Boolean,当两边是true,或两边是false时相等
    true == true // true
    false == false // true
    

!

  • !执行之前会先执行Boolean(x),得到false,则返回true,反之返回false Boolean 的转换逻辑是:一下情况都为false,其他为true
       undefiend,null,+0,-0,NaN,'',"".``,false