簡單來說: == 代表相同壳猜, ===代表嚴(yán)格相同(數(shù)據(jù)類型和值都相等)。
【理解原理】: 當(dāng)進(jìn)行雙等號比較時候氓癌,先檢查兩個操作數(shù)數(shù)據(jù)類型靖榕,如果相同,則進(jìn)行===比較顽铸,如果不同茁计,則愿意為你進(jìn)行一次類型轉(zhuǎn)換,轉(zhuǎn)換成相同類型后再進(jìn)行比較谓松,而===比較時星压,如果類型不同,直接就是false鬼譬。
從這個過程來看娜膘,大家也能發(fā)現(xiàn),某些情況下我們使用===進(jìn)行比較效率要高些优质,因此竣贪,沒有歧義的情況下,不會影響結(jié)果的情況下巩螃,在JS中首選===進(jìn)行邏輯比較演怎。
操作數(shù)1 == 操作數(shù)2,? 操作數(shù)1 === 操作數(shù)2
【比較過程】:
雙等號==:
(1)如果兩個值類型相同避乏,再進(jìn)行三個等號(===)的比較爷耀;
(2)如果兩個值類型不同,也有可能相等拍皮,需根據(jù)以下規(guī)則進(jìn)行類型轉(zhuǎn)換在比較:
1)如果兩個值都是null歹叮,或是undefined跑杭,那么相等;如果一個是null咆耿,一個是undefined德谅,那么相等;
2)如果一個是字符串萨螺,一個是數(shù)值窄做,把字符串轉(zhuǎn)換成數(shù)值之后再進(jìn)行比較;
3)如果是整數(shù)類型和boolean類型的數(shù)值進(jìn)行比較屑迂,1和true使用==比較結(jié)果為true,0和false使用==比較結(jié)果也為true冯键,其它都為false惹盼;可以理解記憶為使用==比較整數(shù)時將1等同true,將0等同false惫确。
三等號===:
(1)如果類型不同手报,就一定不相等;
(2)如果兩個都是數(shù)值改化,并且是同一個值掩蛤,那么相等;如果其中至少一個是NaN陈肛,那么不相等揍鸟。(判斷一個值是否是NaN,只能使用isNaN( ) 來判斷)
(3)如果兩個都是字符串句旱,每個位置的字符都一樣阳藻,那么相等,否則不等谈撒;
(4)如果兩個值都是true腥泥,或是false,那么相等啃匿;
(5)如果兩個值都引用同一個對象或是函數(shù)蛔外,那么相等,否則不相等溯乒;
這點夹厌,跟Java中==和equals的區(qū)別類似。
【總結(jié)一下】:
【1】比較原理:==(雙等號)會先判斷類型裆悄,類型不同絕不相等尊流,如果不同,會進(jìn)行一次類型轉(zhuǎn)換灯帮。===(三等號)如果類型不同崖技,不再進(jìn)行下一步操作逻住。故如果是進(jìn)行同類型值比較進(jìn)行邏輯條件是否成立的判斷,直接使用===(三等號)比較效率高迎献!不需要進(jìn)行類型轉(zhuǎn)換瞎访。
【2】undefined和null:同為undefined或null,不管怎么比都為true吁恍,一個為null扒秸,一個為undefined,==(雙等號)比較為true冀瓦,===(三等號)比較為false伴奥。
【3】整數(shù)與boolean比較,1和true用==比較為true翼闽,0和false用==號比較為true拾徙,其它為false。
【4】字符串和整數(shù)進(jìn)行比較感局,如果字符串轉(zhuǎn)換為整數(shù)和的值和整數(shù)相等尼啡,使用==比較為true,使用===比較為false询微。
【5】字符串和字符串比較崖瞭,每個位置都一樣,使用==和===比較都返回true撑毛。
簡言之书聚,使用===比較不僅要類型相同還要值相等,跟Java中的equals類藻雌。
給大家推薦一個學(xué)習(xí)交流群 點擊鏈接即可加群點擊鏈接加入群聊【cocos/unity交流群】