標籤:
用於進行比較的運算子稱作為關係運算子:小於(<)、大於(>)、小於等於(<=)、大於等於(>=)、相等(==)、不等(!=)、全等(恒等)(===)、不全等(不恒等)(!==)
一、和其他運算子一樣,當關係運算子操作非數值時要遵循一下規則:
1.兩個運算元都是數值,則數值比較;
2.兩個運算元都是字串,則比較兩個字串對應的字元編碼值;
3.兩個運算元有一個是數值,則將另一個轉換為數值,再進行數值比較;
4.兩個運算元有一個是對象,則先調用 valueOf()方法或 toString()方法,再用結果比較;
var box = 3 > 2; //true var box = 3 > 22; //false var box = ‘3‘ > 22; //false var box = ‘3‘ > ‘22‘; //true 比較的是數值字串的第一個字元,這裡第一個字串的第一個數是3比第二個字串的第一個數2大,所以為true var box = ‘a‘ > ‘b‘; //false a=97,b=98 var box = ‘a‘ > ‘B‘; //true B=66,a是97 var box = 1 > {}; //false 如果有 toString()或 valueOf()則返回 1 > 返回數的值 var box = 1>{ toString:function(){ return 2; } }//這樣比較的是1>這個對象的傳回值2嗎,結果是false
二、在相等和不等的比較上,如果運算元是非數值,則遵循一下規則:
1.一個運算元是布爾值,則比較之前將其轉換為數值,false 轉成 0,true 轉成 1;
2.一個運算元是字串,則比較之前將其轉成為數值再比較;
3.一個運算元是對象,則先調用 valueOf()或 toString()方法後再和傳回值比較;
4.不需要任何轉換的情況下,null 和 undefined 是相等的;
5.一個運算元是 NaN,則==返回 false,!=返回 true;並且 NaN 和自身不等;
6.兩個運算元都是對象,則比較他們是否是同一個對象,如果都指向同一個對象,則返回 true,否則返回 false。
7.在全等和全不等的判斷上,比如值和類型都相等,才返回 true,否則返回 false。
var box = 2 == 2; //true var box = ‘2‘ == 2; //true,‘2‘會轉成成數值 2 var box = false == 0; //true,false 轉成數值就是 0 var box = ‘a‘ == ‘A‘; //false,轉換後的編碼不一樣 var box = 2 == {}; //false,執行 toString()或 valueOf()會改變 var box = 2 == NaN; //false,只要有 NaN,都是 false var box = {} == {}; //false,比較的是他們的地址,每個新建立對象的引用地址都不同 var age = {}; var height = age; var box = age == height; //true,引用地址一樣,所以相等 var box = ‘2‘ === 2 //false,值和類型都必須相等 var box = 2 !== 2 //false,值和類型都相等了
三、特殊值對比表
JavaScript的關係(比較)運算子