更新時(shí)間:2020-10-13 17:15:55 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1224次
關(guān)系運(yùn)算符用于測(cè)試兩個(gè)值之間的關(guān)系,根據(jù)關(guān)系是否存在而返回true或false,關(guān)系表達(dá)式總是返回一個(gè)布爾值,通常在if、while或for語句中使用關(guān)系表達(dá)式,用以控制程序的執(zhí)行流程。本文我們就根據(jù)實(shí)例來一起學(xué)習(xí)關(guān)系運(yùn)算符。
Java中共有===、!==、==、!=、<、<=、>、>=8種關(guān)系運(yùn)算符,本文將分別為大家來介紹這8種關(guān)系運(yùn)算符。
一、恒等運(yùn)算符
1.恒等運(yùn)算符'===',也叫嚴(yán)格相等運(yùn)算符,首先計(jì)算其操作數(shù)的值,然后比較這兩個(gè)值,比較過程沒有任何類型轉(zhuǎn)換,比較過程如下:
如果兩個(gè)值的類型不相同,則返回false
console.log(1 === '1');//false
console.log(1 === [1]);//false
如果兩個(gè)值都是Undefined、Null、Boolean、Number、String相同原始類型的值,值相同,就返回true,否則,返回false
console.log(undefined === undefined);//true
console.log(null === null);//true
console.log(true === true);//true
console.log(false === false);//true
console.log(1 === 1);//true
console.log(2.5 === 2.5);//true
如果兩個(gè)值引用同一個(gè)對(duì)象,則返回true,否則,返回false
更詳細(xì)的解釋是,javascript對(duì)象的比較是引用的比較,而不是值的比較。對(duì)象和其本身是相等的,但和其他任何對(duì)象都不相等。如果兩個(gè)不同的對(duì)象具有相同數(shù)量的屬性,相同的屬性名和值,它們依然是不相等的
console.log([] === []);//false
console.log({} === {});//false
console.log(function(){} === function(){});//false
var a = {};
b = a;
console.log(a === b);//true
二、恒不等運(yùn)算符
恒不等運(yùn)算符(!==)又叫嚴(yán)格不等于運(yùn)算符,操作數(shù)的比較過程與恒等運(yùn)算符相同,結(jié)果取反。如果'==='的比較結(jié)果是true,則'!=='的比較結(jié)果是false;如果'==='的比較結(jié)果是false,則'!=='的比較結(jié)果是true
console.log(1 !== '1');//true
console.log(1 !== 1);//false
console.log(true !== false);//true
console.log({} !== {});//true
三、相等運(yùn)算符
相等運(yùn)算符'=='和恒等運(yùn)算符相似,但相等運(yùn)算符的比較并不嚴(yán)格,如果兩個(gè)操作數(shù)不是同一類型,相等運(yùn)算符會(huì)嘗試進(jìn)行一些類型轉(zhuǎn)換,然后再進(jìn)行比較
當(dāng)兩個(gè)操作數(shù)類型相同時(shí),比較規(guī)則和恒等運(yùn)算符規(guī)則相同
console.log(undefined == undefined);//true
console.log(10 == 0xa);//true
console.log(NaN == NaN);//false
console.log([] == []);//false
當(dāng)兩個(gè)操作數(shù)類型不同時(shí),相等運(yùn)算符'=='會(huì)遵守如下規(guī)則:
如果一個(gè)值是對(duì)象類型,另一值是原始類型,則對(duì)象類型會(huì)先使用valueOf()轉(zhuǎn)換成原始值,如果結(jié)果還不是原始值,則再使用toString()方法轉(zhuǎn)換,再進(jìn)行比較
2.在對(duì)象轉(zhuǎn)換為原始值之后,如果兩個(gè)操作數(shù)都是字符串,則進(jìn)行字符串的比較
console.log(new Date() == 'Sat Jun 25 2016 11:07:20 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)');//true
3.在對(duì)象轉(zhuǎn)換為原始值之后,如果至少有一個(gè)操作數(shù)不是字符串,則兩個(gè)操作數(shù)都將通過Number()轉(zhuǎn)型函數(shù)轉(zhuǎn)換成數(shù)字進(jìn)行數(shù)值比較
console.log(true == 1);//true
console.log(true == 0);//false
console.log(false == '1');//false
console.log(false == '0');//true
console.log(true == 'true');//false,相當(dāng)于1 == NaN
console.log([1] == 1);//true,相當(dāng)于1 == 1
console.log([1] == '1');//true,相當(dāng)于'1' == '1'
console.log([] == 0);//true,相當(dāng)于0 == 0
console.log([] == '0');//false,相當(dāng)于'' == '0'
console.log([] == true);//false,相當(dāng)于0 == 1
console.log([1] == true);//true,相當(dāng)于1 == 1
var a = {
valueOf:function(){
return 1;
},
toString:function(){
return '2';
}
}
console.log( a == '1');//true,相當(dāng)于1 == 1
var a = {
valueOf:function(){
return {};
},
toString:function(){
return '1';
}
}
console.log( a == 1);//true,相當(dāng)于1 == 1
四、不相等運(yùn)算符
不相等運(yùn)算符(!=)的操作數(shù)比較過程與相等運(yùn)算符相同,結(jié)果取反。如果'=='的比較結(jié)果是true,則'!='的比較結(jié)果是false;如果'=='的比較結(jié)果是false,則'!='的比較結(jié)果是true
console.log(1 != '1');//false,相當(dāng)于1 != 1
console.log(true != '1');//false,相當(dāng)于1 != 1
console.log('true' != 1);//true,相當(dāng)于NaN != 1
console.log([1] != '1');//false,相當(dāng)于'1' != '1'
console.log([1] != true);//false,相當(dāng)于1 != 1
五、大于運(yùn)算符
大于運(yùn)算符(>)用于比較兩個(gè)操作數(shù),如果第一個(gè)操作數(shù)大于第二個(gè)操作數(shù),則大于運(yùn)算符的計(jì)算結(jié)果為true,否則為false
大于運(yùn)算符的操作數(shù)可能是任意類型,然而,只有數(shù)字和字符串才能真正執(zhí)行比較操作,因此那些不是數(shù)字和字符串的操作數(shù)都將進(jìn)行類型轉(zhuǎn)換,類型轉(zhuǎn)換規(guī)則如下:
1.如果操作數(shù)是對(duì)象,則這個(gè)對(duì)象將先使用valueOf()轉(zhuǎn)換成原始值,如果結(jié)果還不是原始值,則再使用toString()方法轉(zhuǎn)換
2.在對(duì)象轉(zhuǎn)換為原始值之后,如果兩個(gè)操作數(shù)都是字符串,則按照字母表的順序?qū)蓚€(gè)字符串進(jìn)行比較,這里提到的字母表順序是指組成這個(gè)字符串的16位unicode字符的索引順序
console.log('b' > 'a');//true
console.log('B' > 'a');//false
console.log({} > '[a]');//true,相當(dāng)于'[object Object]' > '[a]'
console.log({} > '[p]');//false,相當(dāng)于'[object Object]' > '[p]'
console.log(['a'] > ['b']);//false,相當(dāng)于'a' > 'b'
console.log([2] > [11]);//true,相當(dāng)于'2' > '11'
3.在對(duì)象轉(zhuǎn)換為原始值之后,如果至少有一個(gè)操作數(shù)不是字符串,則兩個(gè)操作數(shù)都轉(zhuǎn)換成數(shù)字進(jìn)行比較
console.log(new Date() > 100);//true,相當(dāng)于1466826928667 > 100
console.log(true > [0]);//true,相當(dāng)于 1 > 0
console.log(2 > 1);//true
console.log(11 > '2');//true,相當(dāng)于11 > 2
console.log(NaN > 1);//false
console.log(1 > NaN);//false
console.log({} > true);//false,相當(dāng)于 NaN > 1
對(duì)于數(shù)字和字符串來說,加號(hào)運(yùn)算符和比較運(yùn)算符的行為有所不同,加號(hào)運(yùn)算符更偏愛字符串,如果它的一個(gè)操作數(shù)是字符串,就進(jìn)行字符串連接。而比較運(yùn)算符則更偏愛數(shù)字,只有在兩個(gè)操作數(shù)都是字符串時(shí),才進(jìn)行字符串的比較
console.log(1 + 2);//3
console.log('1' + '2');//'12'
console.log('1' + 2);//'12',相當(dāng)于 '1' + '2'
console.log(2 > 1);//true
console.log('2' > '1');//true
console.log('2' > 1);//true,相當(dāng)于 2 > 1
六、小于等于運(yùn)算符
小于等于運(yùn)算符(<=)并不依賴于小于或等于運(yùn)算符的比較規(guī)則,而是遵循大于運(yùn)算符的比較規(guī)則,結(jié)果取反。如果'>'的比較結(jié)果是true,則'<='的比較結(jié)果是false;如果'>'的比較結(jié)果是false,則'<='的比較結(jié)果是true
console.log(1 <= '0');//false,相當(dāng)于1 <= 0
console.log(true <= '0');//false,相當(dāng)于1 <= 0
console.log('true' <= 0);//false,相當(dāng)于NaN <= 0
console.log([1] <= '0');//false,相當(dāng)于'1' <= '0'
console.log([0] <= true);//true,相當(dāng)于0 <= 1
console.log(1 <= 1);//true
七、小于運(yùn)算符
小于運(yùn)算符(<)用于比較兩個(gè)操作數(shù),如果第一個(gè)操作數(shù)小于第二個(gè)操作數(shù),則小于運(yùn)算符的計(jì)算結(jié)果為true,否則為false
小于運(yùn)算符與大于運(yùn)算符的類型轉(zhuǎn)換規(guī)則類似,就不再贅述。
八、大于等于運(yùn)算符
同樣地,大于等于運(yùn)算符(>=)并不依賴于大于或等于運(yùn)算符的比較規(guī)則,而是遵循小于運(yùn)算符的比較規(guī)則,結(jié)果取反。如果'<'的比較結(jié)果是true,則'>='的結(jié)果是false;如果'<'的比較結(jié)果是false,則'>='的結(jié)果是true。
以上就是對(duì)8種關(guān)系運(yùn)算符的詳細(xì)介紹,也舉了不少實(shí)例來方便大家理解。其實(shí)這些關(guān)系運(yùn)算符就像一架架橋梁,連通著各種各樣的數(shù)據(jù),向我們表述它們之間的關(guān)系。關(guān)系運(yùn)算符的學(xué)習(xí)同樣也是一架溝通著我們和Java的橋梁,觀看本站的Java零基礎(chǔ)教程,夯實(shí)自己的Java基礎(chǔ),讓我們的學(xué)習(xí)之橋堅(jiān)不可摧!
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)