關(guān)系表達(dá)式用于測試兩個值之間的關(guān)系平项,根據(jù)關(guān)系返回true或false。
比較相等不相等
-
===
恒等運算符或嚴(yán)格相等運算符,比較過程沒有類型轉(zhuǎn)換胳螟。 -
!==
不嚴(yán)格相等
是===
的求反 -
==
相等運算符
這個相等比較寬松惦积,可以允許類型轉(zhuǎn)換接校。 -
!=
不相等
是==
的結(jié)果求反
javascript對象的比較是引用的比較,不是值的比較狮崩。對象只和其本身相等蛛勉。
對象向原始值的轉(zhuǎn)換規(guī)則:日期類通過
toString()
轉(zhuǎn)換,其他的先通過ofValue()
轉(zhuǎn)換睦柴,如果沒有ofValue()
诽凌,再通過toString()
轉(zhuǎn)換。
===
比較規(guī)則:
1.類型不同則不等
2.其中一個是NaN
則不等坦敌,NaN
和自己都不等
3.兩個是字符串侣诵,必須編碼痢法、長度和每個位上字符一樣才相等
4.對象、數(shù)組和函數(shù)杜顺,必須指向相同的引用才相等
==
比較規(guī)則:
1.類型相同則按===
的2 3 4 條比較
2.類型不同比較财搁,先按以下轉(zhuǎn)換再通過上面的2 3 4 比較:
-
null == undefined
//相等 - 數(shù)字和字符串比較,將字符串轉(zhuǎn)換為數(shù)字
- true轉(zhuǎn)換為1哑舒,false轉(zhuǎn)換為0
- 其中一個是對象妇拯,把對象轉(zhuǎn)換為原始值。
true == '1' //結(jié)果為true, true會轉(zhuǎn)換為數(shù)字1洗鸵,'1'也會轉(zhuǎn)換為數(shù)字1
比大小
-
<
小于 -
>
大于 -
<=
小于等于 -
>=
大于等于
只有數(shù)字和字符串才能比較大小越锈,如果操作數(shù)不是這兩種類型,會進(jìn)行類型轉(zhuǎn)換膘滨。
比大小的規(guī)則:
- 如果操作數(shù)有對象甘凭,則轉(zhuǎn)換為原始值;
- 如果兩個操作數(shù)都是字符串火邓,將按照字母表順序依次比較每位字符丹弱;
- 如果有一個操作數(shù)不是字符串,則兩個都轉(zhuǎn)換為數(shù)字铲咨;
- 有一個操作數(shù)是
NaN
躲胳,則結(jié)果為false; -
Infinity
比任何數(shù)字都大纤勒,-Inifity
比任何數(shù)字都小坯苹。
字符串比較使用String.localCompare()方法更加可靠。
加號和比較運算符都可以對字符串和數(shù)字比較摇天,但加號優(yōu)先轉(zhuǎn)換為字符串粹湃,比較運算符優(yōu)先轉(zhuǎn)換為數(shù)字。
in運算符
判斷對象是否有某個屬性:
左側(cè)操作數(shù)是字符串泉坐,如果不是會轉(zhuǎn)換為字符串为鳄;
右側(cè)操作數(shù)是對象。
var person = {name:'Mike',age:23}
'name' in person //true
instanceof運算符
判斷一個對象(左操作數(shù))是否是類(右操作數(shù))的實例腕让。
javascript中類是通過構(gòu)造函數(shù)定義的孤钦,所以右操作數(shù)就是個函數(shù)。
var d = new Date()
d instanceof Date //true
d instanceof Object //true纯丸,所有的對象都是Object的實例
- instanceof判斷也包括父類偏形;
- 左操作數(shù)不是對象的話,返回false液南;
- 右操作數(shù)不是函數(shù)的話壳猜,拋出類型錯誤異常。