關係操作符
- 在比較字符串時,實際比較的是兩個字符串中對應位置的每個字符的字符編碼
- 任何操作數與NaN進行關係比較,結果都是false
var result= "Brick" < "alphabet"; //true
在這個例子中,字符串Brick被認爲小於字符串alphabet,原因是字母B的字符編碼爲66,而小寫字母a的字符編碼是97
如果要按照字母表的順序比較字符串,就必須把兩個操作數都轉換爲相同的大小寫形式(全部大寫或全部小寫),然後再進行比較,如下所示:
var result="Brick".toLowerCase() < "alphabet".toLowerCase(); //false
通過將這兩個操作數都轉換爲小寫的形式,就可以得出alphabet按字母表順序排在Brick之前的正確判斷了
相等操作符
最早在ECMAScript中的相等和不等操作符在執行比較之前,先將對象轉換成相似類型。
最後,ECMAScript提供兩組操作符:相等和不相等——先轉換再比較,全等和全部等——僅比較不轉換
相等和不相等
在轉換不同的數據類型時,相等和不相等操作符遵循下列基本規則:
- 如果有一個操作數是布爾值,則在比較相等性之前先將其轉換爲數值——false轉換爲0,true轉換爲1
- 如果一個操作數是字符串,另一個操作數是數值,在比較相等性之前先將字符串轉換爲數值
- 如果一個操作數是對象,另一個操作數不是,則調用對象的valueOf()方法,用得到的基本類型數值按照前面的規則進行比較,這兩個操作符在進行比較時則要遵循下列規則:
- null和underfined是相等的
- 要比較相等性之前,不能將null和underfined轉換成其他任何值
- 如果有一個操作數是NaN,則相等操作符返回false,不相等操作符返回true
- 即使兩個操作數都是NaN,相等操作符也返回false,因爲按照規則,NaN不等於NaN
- 如果兩個操作數都是對象,則比較他們是不是同一個對象。如果兩個操作數都指向同一個對象,則相等操作符返回true,否則返回false
全等(===)和不全等(!==)
除了在比較之前不轉換操作數之外,全等不全等與相等不相等操作符額沒有什麼區別
var result1=("55" == 55); //true 因爲轉換後相等
var result2=("55" === 55); //false 因爲不轉換數據類型不相等
null == underfined會返回true,因爲他們是類似的值,但null===underfined會返回false,因爲他們是不同類型的值
由於相等和不相等操作符存在類型轉換問題,而爲了保持代碼中數據類型的完整性,推薦使用全等和不全等操作符