JS中不一样类型做比较的规律 (比较运算符)

JS 不一样数据类型的比较 是个头疼事情,那有没有规律可循,让记忆和理解起来更加容易呢,javascript

console.log(1 ==  "1") //true

 好的,我先把规则告诉你们,而后你们理解后再开始练习。看看效果是否是很显著;java

不一样数据类型间的比较,规律以下
类型 类型 其余说明 其余说明
对象 对象 比较是否是同一个内存地址  
对象 字符串 对象先转为字符串,在和字符串进行比较  
对象 布尔类型

两边都要先转为数值spa

false 是  0,true 是 1code

对象类型先隐式调用toString()方法,而后在Number()对象

 
对象 数字

对象要转为数字,在进行比较(对象先隐式调用toString()方法转为字符串,而后在把字符串ip

转为数字使用Number()方法)内存

 
数字 布尔 布尔转成数字(false 是  0,true 是 1),在和数字进行比较  
数字 字符串 字符串转成数字使用Number()方法,在和数字进行比较  
布尔 数字/字符串 都转成数字在进行比较  
null  undefined true  
null/undefined 其余类型 结果都是false   
NaN NaN false  

 

 

 

 

 

 

 

 

 

 

 

 

 

自身作布尔运算的时候

以前文章说过,除了 "" 0 NaN null undefined false 为false, 其余都为trueci

//先执行![] 转成布尔 false 而后就变成了 布尔和对象比较 都转成数值 
    //false --> 0 [] -> '' -> 0  
    console.log(![] == [])// true

    //地址空间比较 确定不相等
    console.log([]==[])// false

    //![] 先转成false 
    console.log(![]==false);//true
    //对象和字符串比较 对象转字符串 "[object Object]"
    console.log({a:1}=="[object Object]")// true

    //字符串转成数字(调用Number()) NaN 
    console.log("12px" == 12); //false

 这里有条新的规则:切记! 切记!切记!字符串

 ! : 会先把后面的值进行去布尔,而后再取反,最后比较io