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