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