==、===都是相等運算符,這個你們應該都知道,但兩者有什麼區別呢?其實==是相等,===是嚴格相等,那他們有什麼本質的區別呢?下面我就給你們細細道來。ui
比較兩個值的時候,有兩種狀況,一種若是兩個值的類型相同,就直接比較;另外一種若是兩個值得類型不一樣,則會嘗試改變爲相同的類型在進行比較
第一種很好理解,直接比較完事兒,第二種就更有趣一些,它究竟是怎麼轉換的呢?下面咱們一一列舉code
99 == ''99"
你們猜一猜結果是什麼True?False?對象
結果爲True
其實JS在數字和字符串比較時,都是把字符串轉換爲數字,再對數字進行比較的,舉個列子字符串
99 == "chuichui"
JS是怎麼轉換的呢?變量
99 == NaN // false
JS嘗試轉換字符串'chuichui',可是該字符串並不能轉換爲數字,這時候轉換的結果就爲NaN分享
其實JS在布爾值和其餘類型比較時,都是把布爾值轉換爲數字,再進行比較的,舉個列子co
1 == true ↓↓↓↓↓↓ 1 == 1
JS會將true轉化爲數字1,再作比較
那"1" == true又是怎麼比較的呢?block
"1" == true ↓↓↓↓↓↓ "1" == 1 ↓↓↓↓↓↓ 1 == 1 // true
轉換順序字符
null == undefined
你們猜一猜,結果是True?False?數字
結果爲True
是否是感受很奇怪,但規則就是這樣。咱們能夠理解爲都是「沒有值」
只不過一個是沒有值得變量,一個是沒有值的對象,所以他們類似
有一個須要注意的地方,有些轉換你可能猝不及防
false == ""
True?False?
結果爲True
轉換過程
下面咱們在說說嚴格相等 ===
有了前面的相等的定義,我想你們能猜個八九不離十,嚴格相等就是類型和值徹底相同,這裏不存在以上所存在的轉換問題
好啦,以上就是我本次分享的所有內容啦,若是你以爲個人文章對你有一丟丟幫助,那麼請不要吝嗇你的贊👍哦,阿門~