JavaScript 比較運算符
比較運算符用于比較兩個表達式的結果。如變量 num 加上變量 offset 是否大于0
,大于就是一個比較運算符。
比較運算符還分為相等運算符
與關系運算符
。
相等運算符:
==
相等!=
不相等===
嚴格相等!==
嚴格不相等
關系運算符:
>
大于>=
大于等于<
小于<=
小于等于
運算符返回的都是布爾值。
運算符左右的值也被稱為操作數。
1. 相等運算符
相等運算符用于判斷運算符左右兩邊的值是否一致。
很多資料也會把相等稱為等于,嚴格相等被稱作嚴格等于。
1.1 相等
相等運算符在進行比較的時候,如果兩邊操作數數據類型不同,則會嘗試轉換成相同的類型再進行比較,如果轉換成相同類型后的值相同,則返回 true,否則返回 false。
如果比較的兩個操作數是引用類型,則會比較內部的引用(是否引用同一個內存地址上的值)。
'3' == 3; // true
3 == '3'; // true
2 == 1; // false
3 + 2 == 5; // true
var obj1 = {a: 1};
obj1 == {a: 1}; //false
var obj2 = obj1;
obj1 == obj2; // true
undefined == null; // true
1 == true; // true
0 == false; // true
因為內容比較簡單,推薦直接在控制臺調試,可以快速看到結果。
具體的轉化規則可以查閱隱式轉換
章節。
注意:相等會對不同類型的比較數據進行隱式轉換,為了防止誤導閱讀代碼的開發者對轉換進行猜測,以及避免一些不可控的問題,大部分開發者會選擇不使用相等。
1.2 不相等
不相等的比較機制和相等一致,類型相同直接比較,不相同的會嘗試轉換成相同類型,碰到引用類型則比較引用地址是否一致。區別就在于最后返回的結果與相等相反,比較結果如果不一致,則返回 true,一致則返回 false。
1 != 1; // false
1 != 2; // true
var obj1 = {a: 1};
obj1 != {a: 1}; // true
1.3 嚴格相等
嚴格相等在比較的時候,碰到兩邊的操作數類型不同,則會直接返回 false
,不會進行類型的轉換。
當類型一樣時,則比較等號兩邊的值是否相等,相等則返回 true
,否則返回 false。
1 === '1'; // false;
0 === false; // false
嚴格相等更加嚴格,程序中使用嚴格相等可以避免許多不可控的類型轉換,特別是當開發者不熟悉轉換規則時候,應盡可能使用嚴格相等。
1.4 嚴格不相等
嚴格不相等在比較的時候,如果兩邊的操作數不相等則返回 true
,否則返回 false
。其和嚴格相等一樣,不會進行類型轉換。
1 !== 1; // false
1 !== 2; // true
1 !== '1'; // true
undefined !== null; // true
注意:在做不相等運算的時候,也應該盡可能選擇嚴格不相等,原因與建議使用嚴格相等一致。
2. 關系運算符
2.1 大于
大于運算符會在左操作數大于右操作數的時候返回 true,否則返回 false。
1 > 2; // false
2 > 2; // false
2 > 1; // true
2.2 大于等于
大于運算符會在左操作數大于等于右操作數的時候返回 true,否則返回 false。
1 >= 2; // false
3 >= 2; // true
2 >= 2; // true
2.3 小于
小于運算符會在左操作數小于右操作數的時候返回 true,否則返回 false。
1 < 2; // true
2 < 2; // false
3 < 2; // false
2.4 小于等于
小于等于運算符會在左操作數小于等于右操作數的時候返回 true,否則返回 false。
1 <= 2; // true
2 <= 2; // true
3 <= 2; // false
3. 注意點
3.1 字符串進行比較
假如比較運算符的兩側操作數都為字符串,則碰到中文,會將中文轉化成對應的 Unicode 碼,碰到英文則轉化成對應的 ASCII 碼,再對碼值進行比較。
'a' > 'z'; // false
a
的 ASCII 碼為 97,z
的 ASCII 碼為 122,兩者在比較的時候相當于是 97 > 122
,結果就是 false。
如果碰到有多個字符,則會依次進行比較。
'aaaaaz' > 'aaaaaaaaa'; // true
兩個操作數前五位都是 a
,所以第六位才能決定出結果。
4. 小結
比較運算符主要用于比較兩個值的大小關系,特別需要注意的是嚴格相等與相等的區別。