前端三十|13. [JS] 為什麼判斷相等時不能用雙等號?

Schaos
Schaos’s Blog
Published in
9 min readSep 29, 2019

--

相信大家在初學 JavaScript 時,一定有人跟你說過:「比較時記得要用三等號(===),不要用雙等號(==)」,但你知道為什麼嗎?稍微有經驗的人可能馬上想到了,因為使用雙等號比較時,JavaScript 會做 自動轉型,那麼自動轉型是怎麼轉的呢?背後的機制又是什麼?今天我們就來揭開弱型別的 JavaScript 背後,自動轉型的神秘面紗。

自動轉型的「型」,指的當然是「型別」;因此在真正開始討論之前,你必須要先充分認識 JavaScript 中的基礎型別。我們也在 昨天的文章 中有深入討論這件事情,如果你還沒看過,建議你先去看看,對型別會比較有概念喔!

本系列文已經重新編校彙整編輯成冊,並正式出版囉!

前端三十:從 HTML 到瀏覽器渲染的前端開發者必備心法好評販售中!

喜歡我文章內容的讀者們,歡迎您前往購買支持

相等性

在 JavaScript 中有數種 比較運算子,比較特別的是,這邊有兩種相等運算子:一般相等嚴格相等,也就是雙等號及三等號。

嚴格相等

先從較嚴謹的嚴格相等開始看起吧。既然稱為嚴格相等,被比較的雙方除了值相等之外,兩者的型別也必須要相等,比較的結果才會是 true

'foo' === 'foo' // true
123 === 123 // true
123 === '123' // false

另外也補充,昨天有提到 number 型別中的 0-0,在嚴格比較時會被認為是相等的。

一般相等

也有人稱為 寬鬆相等,與嚴格相等相比,會先將比較的雙方自動轉型成同型別的數值,隨後再開始比較,只要「值」一樣便會回傳 true 的結果:

'foo' == 'foo' // true
123 == 123 // true
123 == '123' // true
false == '' // true
false == '0' // true
'' == '0' // false

這裡提到的的「自動轉型」,也就是 JavaScript 的判斷句讓許多開發者感到無比困惑,並建議大家避免使用一般相等的原因了。在本文的後段我們會再仔細端詳它;而這邊只要先知道它和嚴格相等的差異即可。

物件的相等

--

--