### 相等操作符 * 相等和不相等 * 全等和不全等 * * * * * #### 相等和不相等 > ECMAscript中相等操作符由两个( == )等于号表示,如果操作数相等,则返回true,反之返回false。不相等操作符由( != )表示,如果两个数不相等,返回true,反之返回false,这两个操作符都会先转换操作数(通常称为强制类型转换),然后再比较他们的相等性。在操作不同数据类型时,相等和不相等遵循下列基本规则: > * 如果有一个值是布尔值,则在比较相等性之前先将其转为数值 :false转为0 ,true转为1。 >* 如果一个操作数是字符串,另一个操作数数数值,在比较相等性之前会先将字符串转为数值。 >* 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照上面的规则进行比较。 >* null和undefined是相等的,因为undefined派生自null,在比较null和undefined时不能将他们转为其他值 >* 如果又一个操作数是NaN则相等操作返回false,反之返回true。敲黑板:即使两个操作数都是NaN,他们也不相等,因为NaN不等于任何值,包括它自己。 >* 如果两个操作数都是对象,则比较他们是不是同一个对象,如果两个操作数都指向一个对象,则返回true,反之返回false。 #### 全等和不全等 > 全等和不全等与相等和不相等的区别就是:全等和不全等不会转换操作数类型,它在两个操作数不经转换就相等地情况下返回true,反之返回false,如下所示: ~~~ let i = 55 let b = "55" console.log(i==b) // true 因为==比较时会将字符串“55”转换为数字55 console.log(i===b) //false 因为不会发生类型转换,string类型不等于number类型 ~~~