因为之前学过C++和JAVA这种强类型语言,所以每次遇到JS这种弱类型语言的复杂的类型转换特别容易和流控制语句如if语句混淆,所以今天又去复习了一下
==运算符转换规则
- 如果有一个操作数是布尔值,则在比较相等性前把其转换为Number,true转换为1,false为0
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值
- 如果一个操作数是对象,另一个不是,则调用对象的valueOf()方法,转换为基本类型值按照前面比较
// valueOf()方法的介绍 https://www.imooc.com/article/details/id/23107
==运算符比较规则
- null和undefined是相等的
- 要比较相等性之前,null和undefined是不能进行类型转换的。这条规则就解释了如下代码
null == 0 // false
undefined == 0 // false
null == false // false
undefined == false // false
- NaN不等于任和数据,所以
NaN == NaN // false
NaN != NaN // true
- 如果两个操作数都是对象,则比较两个操作数是否指向同一个对象,如果是则返回true
tip:这么多规则用的多了也就熟悉了,但既然JS有===全等运算符,又何必舍近求远呢