🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

多年來,JavaScript 一直是我主要的工作語言(當然,現在主要使用的是 TypeScript 😉)。我在 ES6 之前就開始使用它了,那時這門語言感覺比現在「原始」得多——沒有 let 或 const,沒有擴展運算符,沒有 Promise,甚至沒有類,只有原型。

那時候寫 JavaScript 簡直是一團糟,好壞參半——就像坐過山車一樣,你必須真正理解這門語言,才能避免自毀前程。我記得當時讀了很多相關的書。其中讓我印象深刻的是 Kyle Simpson 的《You Don't Know JS》後來改名為《You Don't Know JS Yet 》)。你現在仍然可以在 GitHub 上找到它們,它們絕對是 JavaScript 知識的寶庫。

所以現在,當又一個後端同事嘲笑像true + true === 2這樣的 JavaScript 怪癖時,我只能禮貌地微笑點頭……內心卻在吶喊: “這不是很明顯嗎?因為這樣那樣,還有……” xDDD 我以前真的會試著解釋,但通常過了十秒鐘,他們就會像看瘋子一樣盯著我,所以我就放棄了😅

不過,在 dev.to 上,我希望能找到真正想聽我解釋的人😂

我可以寫一篇長文來介紹各種 JavaScript 的奇聞軼事,但不如做成一個週末系列文章呢?如果你喜歡這個想法,就按個讚吧 😉

為什麼true + true === 2

以下是人們喜歡拿來開玩笑的經典 JavaScript 笑話:

true + true === 2 // true

乍一看,這感覺很荒謬。

兩個布林值相加怎麼會得到一個數字呢?


關鍵在於: + (通常)是一個數值運算子。

在 JavaScript 中, +運算子有兩種工作模式:

  • 如果涉及字串 →字串連接

  • 否則 →數值加法

由於true不是字串,JavaScript 假定這是一個數學表達式,並將兩個值都轉換為數字。


那麼, true的數值是多少呢?

JavaScript 使用名為ToNumber 的標準內部轉換規則。

  • true1

  • false0

所以:

true + true
// becomes
1 + 1
// which equals
2

這並非偶然。許多語言在底層都將布林值視為數值:

  • Python: True + True === 2

  • C/C++: true行為等同於1

所以,JavaScript 在這裡並沒有表現出任何獨特的怪異之處——這實際上是電腦科學領域非常正常的現象。


它還解釋了其他一些“奇怪”的案例。

例如:

true * 10   // 10
false * 10  // 0
true - 1    // 0

一旦你了解布林值可以轉換為10 ,這裡就沒有什麼是神奇的了。


實用要點

  • +執行數值加法,除非涉及字串。

  • true轉換為1false轉換為0

  • 這並非JavaScript的無稽之談──很多語言的行為都類似。

所以, true + true === 2不是 bug……只是邏輯戴著一頂滑稽的帽子而已 😎


原文出處:https://dev.to/sylwia-lask/yes-true-true-2-and-no-javascript-isnt-broken-37p7


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝6   💬3   ❤️2
141
🥈
我愛JS
💬1  
6
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付