==
和===
,其中===
的使用是非常简单的,就是判断两者类型和值是否相同。
这篇文章主要来谈一下==
。
对于==
来说,如果对比双方的类型不一样,就会进行「类型转换」。
对于x == y
,我们会进行如下判断流程:
1、首先判断二者类型是否相同,相同的话就是比大小了。类型不相同,就会进行类型转换。
2、类型转换的时候,会先判断是否在对比null
和undefined
,如果是的话就返回true
。
3、如果是Number
和String
类型在对比,就会将字符串转换为Number
。
1 == '1' // 转换为: 1 == 1
4、如果有一方是Boolean
类型,就会把Boolean
转为Number
。
'1' == true // 转换为: '1' == 1 // 转换为: 1 == 1
5、如果其中一方是Object
类型另一方是String
、Number
,就会把Object
转为原始类型再进行判断,也就是执行x.toString()
及valueOf
。
'1' == { name: 'Andy'} // 转换为: '1' == '[object Object]'