JavaScript 的 null + null 會是什麼?談 + 號運算子

更新 發佈閱讀 4 分鐘

undefinednull 是 JavaScript 中其二的原始資料型別(primitive data types,其他原始資料型別有 string, number, bigint, boolean, symbol ),但你有想過這兩個資料型別如果相加會發生什麼事情嗎?

那天同事就聊到了在別的語言裡 null + null 的情況,不禁讓我反思:如果是在 JS 裡,那麼 null + null 會回傳什麼?

在得到正確答案之前,我想到 + 號既然是運算子,那麼應是把兩個 null 相加,但又因為 null 不是數字型別,所以應該是 NaN。結果如圖:

raw-image

0,數字 0 啊!這是為什麼?原因要從標題的 + 號說起。

運算子 +

注意!+++ 是不一樣的運算子。

+ 號是個多種用途的運算子:

作為一元運算子時會嘗試將運算元轉換成數字(例如 +”3” 就是將運算元的字串 “3” 轉換成數字 3)。

作為二元運算子時,可以將兩個運算元相加,也可以將兩個運算元的字串結合在一起。

那麼要怎麼判斷應該要將前後當作字串結合,還是當作數字相加呢?

先看你是什麼原始型別

在 JS 的規則中,會先將兩個運算元強制轉換成原始型別——也就是開頭說到的 undefined, null, string, number, bigint, boolean, symbol ,如果其中一個運算元是字串 string,那就會把另一個運算元也轉成字串,當作字串組合。

當運算元都不是字串、也都不是 bigint(*) 的話,會將兩個運算元當作數字相加。

註:如果兩個運算元都是 bigint 的話,會正常進行相加,但如果其中一個不是 bigint 的話,則會出現 TypeError

轉成原始型別(primitive data types)再相加

如果是轉換成數字,可以看到 MDN 針對不同型別在進行轉換後都有說明,而 null 在轉成數字後會是 0null + null 會轉換成 0 + 0,結果自然是 0

小結

在這次研究的過程中,重新了解了程式碼在處理運算元、運算子的先後順序以及規則,覺得又長了一點知識。

參考資料

留言
avatar-img
Larry Chien的沙龍
22會員
35內容數
我是 Larry,《下班後的產品工程師》是我在下班之餘分享我對網路產業的工程師、產品經理相關職能的想法和心得,也會分享一些自己突發奇想的產品、商業問題。希望文章內容能帶給你/妳收穫。對了,如果很久沒有更新,一定不是因為我還沒下班。
Larry Chien的沙龍的其他內容
2025/08/24
恐懼一件事情而不敢開始嗎?試著用 fear-setting 的架構為自己開一條路。
2025/08/24
恐懼一件事情而不敢開始嗎?試著用 fear-setting 的架構為自己開一條路。
2025/08/17
如果我寫 code 的工作都交給 AI 了,我還能在工作上展現什麼價值?
2025/08/17
如果我寫 code 的工作都交給 AI 了,我還能在工作上展現什麼價值?
2023/06/18
這是 30 天寫作挑戰的第 30+1 天,這篇文章要來分享我在挑戰的過程中的收穫,也希望這些收穫能夠給各位讀者有些幫助,那我們就開始吧!
Thumbnail
2023/06/18
這是 30 天寫作挑戰的第 30+1 天,這篇文章要來分享我在挑戰的過程中的收穫,也希望這些收穫能夠給各位讀者有些幫助,那我們就開始吧!
Thumbnail
看更多
你可能也想看
Thumbnail
話說身為短線交易者,每天要作的事情就是從盤勢觀察、到籌碼流向,再到經過多維度資料數據交叉比對,盤中盯著分K、江波圖和五檔報價,算計著每一分K線的轉折,雖能換來即時驗證判斷的快感與成就,但長期下來,卻也衍生眼睛與肩頸卻成了抹不去的職業病。
Thumbnail
話說身為短線交易者,每天要作的事情就是從盤勢觀察、到籌碼流向,再到經過多維度資料數據交叉比對,盤中盯著分K、江波圖和五檔報價,算計著每一分K線的轉折,雖能換來即時驗證判斷的快感與成就,但長期下來,卻也衍生眼睛與肩頸卻成了抹不去的職業病。
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
此章節旨在介紹TypeScript中的運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子,以及他們的優先等級。每種運算子都以清晰的解釋和代碼範例進行詳細說明,幫助讀者理解並有效地在自己的程式碼中使用。
Thumbnail
此章節旨在介紹TypeScript中的運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子,以及他們的優先等級。每種運算子都以清晰的解釋和代碼範例進行詳細說明,幫助讀者理解並有效地在自己的程式碼中使用。
Thumbnail
了解這些運算子及其優先等級有助於更好地理解和編寫 JavaScript 代碼
Thumbnail
了解這些運算子及其優先等級有助於更好地理解和編寫 JavaScript 代碼
Thumbnail
在本章節中,我們將學習JavaScript的基本語法,包括如何註解代碼和如何聲明變數。瞭解這些基礎知識對於進一步學習和使用JavaScript來編寫代碼是非常重要的。
Thumbnail
在本章節中,我們將學習JavaScript的基本語法,包括如何註解代碼和如何聲明變數。瞭解這些基礎知識對於進一步學習和使用JavaScript來編寫代碼是非常重要的。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News