在写js的时候不可避免的会使用等于操作符来进行判断操作,而等于操作符在比对时会将符号两端的数据进行类型转换,有些转换规则是必须要知道的。而全等操作符是不会进行类型转换的。
等于和不等于
等于使用 (==) 表示,如果操作数相等则返回true,不等号用 (!=) 表示,与等于相反。这两个操作符都会先进行类型转换(强制类型转换)再确定操作符是否相等。转换规则如下:
1:如果任一操作数是布尔值,则将其转换为数值再比较是否相等。false转换为0,true转换为1。
2:如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等。
3:如果一个操作数是对象,另一个不是,则调用对象的valueOf()方法取得其原始值,再根据前面的规则进行比较。
在进行比较时,这两个操作符会遵循如下规则。
1:null和undefined相等。
2:null和undefined不能转换为其他类型的值在进行比较。(特殊)
3:如果有任一操作符数是NaN,则相等操作符返回false。(即使两个操作数都是NaN,相等操作符也返回false,因为按照规则,NaN不等于NaN)
4:如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true。
一些特殊情况以及比较结果
null == undefined //true
"NaN" == NaN //false
5 == NaN //false
NaN == NaN //false
NaN != NaN //true
false == 0 //true
true == 1 //true
true == 2 //false
undefined == 0 //false
null == 0 //false
"5" == 5 //true
全等和不全等
全等用 (===) ,不全等用 (!==) ,返回值与用法与相等不相等操作符类似,只不过它们在比较时不转换操作数。
比较全等时只要两个操作数类型不一致都返回 false。
摘抄自权威书籍,防止记不住而且百度的杂七杂八的不准确。