Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

本文為「JS 101:資料型別」系列第 8 篇

JavaScript 特殊數字值:Infinity 與 NaN 是什麼?

最後更新:2026年2月12日JavaScript

上一篇我們認識了 JavaScript 的算術運算和運算子,知道怎麼用 +、-、*、/、% 來計算數字。

但有些計算的結果,沒辦法用一般的數字來表示。

比如:一個數字除以零,答案是什麼?「無窮大」減掉「無窮大」,結果又是什麼?

JavaScript 不會因為這些奇怪的計算就當機,而是會給你一些「特殊的數字值」來表示這些情況。

這篇文章會帶你認識 JavaScript 中的三個特殊數字值:Infinity、-Infinity 和 NaN。

Infinity 和 -Infinity:無限大與負無限大

還記得前一篇提到的嗎?JavaScript 用 64 個位元來儲存一個數字值。

但 64 個位元能表示的數字是有限的,總會有「大到放不下」的時候。

為了處理這種情況,JavaScript 在 64 位元的組合裡,特別保留了兩組位元排列,用來代表「超出範圍的大」和「超出範圍的小」:

  • Infinity:代表正無窮大
  • -Infinity:代表負無窮大

它們跟 42、3.14 一樣,都是數字型態的資料值,一樣儲存在記憶體的 64 個位元裡。

只是它們代表的不是一個具體的數字,而是「這個數字已經大到(或小到)無法用正常方式表示了」。

什麼時候會碰到它們呢?

最常見的情況就是「除以零」:

1 / 0    // 得到 Infinity
-1 / 0   // 得到 -Infinity

在數學裡,除以零是沒有定義的。

但 JavaScript 不會報錯,而是直接給你 Infinity,代表「這個結果大到沒有辦法用一般數字表示」。

對 Infinity 做計算會怎樣?

你可以對 Infinity 做加減乘除,但結果通常還是 Infinity:

Infinity + 1        // 還是 Infinity
Infinity + 1000     // 還是 Infinity
Infinity * 2        // 還是 Infinity

這其實很合理——無限大加上任何數字,還是無限大。

不過,這也代表用 Infinity 來做計算是不可靠的。

因為不管你加多少、乘多少,結果都一樣,你根本無法從結果中得到有意義的資訊。

所以在實際寫程式的時候,如果你的計算結果出現了 Infinity,通常代表某個地方出了問題,而不是你真的在處理「無限大」。

NaN:不是數字的「數字」

除了 Infinity 和 -Infinity,JavaScript 在 64 位元的組合裡還保留了第三組特殊的位元排列:NaN。

NaN 是 Not a Number 的縮寫,意思是「不是一個數字」。

它跟 Infinity 一樣,是一個數字型態的資料值,儲存在 64 位元裡。

但它代表的意思不同——Infinity 是「數字大到放不下」,而 NaN 是「根本算不出一個有意義的數字」。

什麼時候會出現 NaN?

當你嘗試做一個「沒有意義的數字運算」時,JavaScript 就會給你 NaN:

0 / 0               // 得到 NaN
Infinity - Infinity  // 得到 NaN
"hello" * 3          // 得到 NaN

拿 0 / 0 來說——零除以零,在數學裡是沒有定義的,它不是 0,也不是 Infinity,根本沒有一個合理的答案。

JavaScript 遇到這種情況,就會用 NaN 來告訴你:「我算不出一個有意義的數字結果。」

NaN 最矛盾的地方

NaN 有一個很容易讓初學者困惑的地方:它的名字叫「不是數字」,但它的資料型態卻是數字。

typeof NaN   // 得到 "number"

這聽起來很矛盾,但你可以這樣理解:NaN 是 JavaScript 數字型態裡的一個特殊標記,專門用來表示「這次的計算失敗了,沒有產生有意義的數字結果」。

它之所以屬於數字型態,是因為它是從數字運算中產生的——只是這個結果恰好不是一個有意義的數字。

小結

讓我們整理一下這篇文章的重點:

  1. JavaScript 有三個特殊的數字值:Infinity、-Infinity 和 NaN。
  2. Infinity 和 -Infinity 代表正負無限大,通常在除以零的時候出現。對 Infinity 做計算的結果不可靠,出現時通常代表程式邏輯有問題。
  3. NaN(Not a Number)代表「算不出有意義的數字結果」,像是 0 / 0 或 Infinity - Infinity。
  4. NaN 雖然叫「不是數字」,但它的資料型態是數字——因為它是從數字運算中產生的特殊標記。
上一篇初學者指南:深入了解 JavaScript 的類型強制轉換(Coercion)
下一篇JavaScript 的 null 和 undefined 是什麼?兩種空值的差異
目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

JavaScript

目錄

  • Infinity 和 -Infinity:無限大與負無限大
  • 對 Infinity 做計算會怎樣?
  • NaN:不是數字的「數字」
  • 什麼時候會出現 NaN?
  • NaN 最矛盾的地方
  • 小結