==与===
1、对于string,number等基础类型,==和===是有区别的
1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等===如果类型不同,其结果就是不等;原始类型的数据会转换成数值类型再进行比较。字符串和布尔值都会转换成数值,所以题主的问题中会有第二个string输出。
2)同类型比较,直接进行“值”比较,两者结果一样
2、对于Array,Object等高级类型,==和===是没有区别的进行“指针地址”比较
3、基础类型与高级类型,==和===是有区别的
1)对于==,将高级转化为基础类型,进行“值”比较
2)因为类型不同,===结果为false
3)undefined和null:undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。
{} == {} //false
{} === {} //false
NaN == NaN //false
NaN === NaN //false
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
所以,相等运算符隐藏的类型转换,会带来一些违反直觉的结果,这就是为什么建议尽量不要使用相等运算符。
!=与!==
!= 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。
!== 只有在相同类型下,才会比较其值。