在JavaScript中,我們經(jīng)常會(huì)使用三等于運(yùn)算符(===)來(lái)比較兩個(gè)值是否相等。與雙等于運(yùn)算符(==)相比,三等于運(yùn)算符有著更加嚴(yán)格的比較規(guī)則,可以避免一些隱式類型轉(zhuǎn)換帶來(lái)的問題。
舉個(gè)例子,如果我們使用雙等于運(yùn)算符比較數(shù)字和字符串類型的值:
console.log(5 == '5'); //true
這里數(shù)字5和字符串'5'會(huì)被隱式轉(zhuǎn)換成相同的類型再進(jìn)行比較,最終返回true。但是如果我們使用三等于運(yùn)算符進(jìn)行比較:
console.log(5 === '5'); //false
這時(shí)候因?yàn)閮蓚€(gè)值的類型不一樣,所以不會(huì)進(jìn)行隱式類型轉(zhuǎn)換,直接返回false。
除了避免隱式類型轉(zhuǎn)換帶來(lái)的問題,三等于運(yùn)算符還可以避免一些奇怪的比較結(jié)果。比如以下例子:
console.log(null == undefined); //true console.log(null === undefined); //false
使用雙等于運(yùn)算符對(duì)于null和undefined的比較會(huì)返回true,這是因?yàn)閚ull和undefined會(huì)被隱式轉(zhuǎn)換成相同的類型再進(jìn)行比較。但是使用三等于運(yùn)算符比較時(shí)不會(huì)進(jìn)行隱式類型轉(zhuǎn)換,因此返回false。
還有一種常見的使用三等于運(yùn)算符的場(chǎng)景是判斷一個(gè)變量是否為undefined:
if (typeof var1 === 'undefined') { console.log('var1 is undefined'); }
如果使用雙等于運(yùn)算符,變量為null的時(shí)候也會(huì)返回true,這不是我們期望的結(jié)果。因此使用三等于運(yùn)算符更加嚴(yán)謹(jǐn),可以避免這種問題。
總結(jié)來(lái)說(shuō),使用三等于運(yùn)算符可以避免隱式類型轉(zhuǎn)換等問題,在一些情況下也會(huì)得到更加準(zhǔn)確的比較結(jié)果。雖然使用三等于運(yùn)算符需要多寫一些代碼,但是在保證程序正確性方面是非常值得的。