【JS面試題之一】js中==和===區(qū)別


作者:xcbeyond
瘋狂源自夢想,技術(shù)成就輝煌!微信公眾號:《程序猿技術(shù)大咖》號主,專注后端開發(fā)多年,擁有豐富的研發(fā)經(jīng)驗(yàn),樂于技術(shù)輸出、分享,現(xiàn)階段從事微服務(wù)架構(gòu)項(xiàng)目的研發(fā)工作,涉及架構(gòu)設(shè)計(jì)、技術(shù)選型、業(yè)務(wù)研發(fā)等工作。對于Java、微服務(wù)、數(shù)據(jù)庫、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗(yàn)。 






   

簡單來說: == 代表相同, ===代表嚴(yán)格相同, 為啥這么說呢,

這么理解: 當(dāng)進(jìn)行雙等號比較時(shí)候: 先檢查兩個(gè)操作數(shù)數(shù)據(jù)類型,如果相同, 則進(jìn)行===比較, 如果不同, 則愿意為你進(jìn)行一次類型轉(zhuǎn)換, 轉(zhuǎn)換成相同類型后再進(jìn)行比較, 而===比較時(shí), 如果類型不同,直接就是false.

 

操作數(shù)1 == 操作數(shù)2,  操作數(shù)1 === 操作數(shù)2

比較過程:

  雙等號==:

 ?。?)如果兩個(gè)值類型相同,再進(jìn)行三個(gè)等號(===)的比較

 ?。?)如果兩個(gè)值類型不同,也有可能相等,需根據(jù)以下規(guī)則進(jìn)行類型轉(zhuǎn)換在比較:

    1)如果一個(gè)是null,一個(gè)是undefined,那么相等

    2)如果一個(gè)是字符串,一個(gè)是數(shù)值,把字符串轉(zhuǎn)換成數(shù)值之后再進(jìn)行比較

  

  三等號===:

 ?。?)如果類型不同,就一定不相等

 ?。?)如果兩個(gè)都是數(shù)值,并且是同一個(gè)值,那么相等;如果其中至少一個(gè)是NaN,那么不相等。(判斷一個(gè)值是否是NaN,只能使用isNaN( ) 來判斷)

 ?。?)如果兩個(gè)都是字符串,每個(gè)位置的字符都一樣,那么相等,否則不相等。

 ?。?)如果兩個(gè)值都是true,或是false,那么相等

 ?。?)如果兩個(gè)值都引用同一個(gè)對象或是函數(shù),那么相等,否則不相等

 ?。?)如果兩個(gè)值都是null,或是undefined,那么相等