首頁 > web前端 > js教程 > JavaScript號碼的樂趣

JavaScript號碼的樂趣

Lisa Kudrow
發布: 2025-02-24 10:17:10
原創
442 人瀏覽過

Fun with JavaScript Numbers

關鍵要點

  • JavaScript 中所有數字都使用 Number 數據類型表示,包括整數、實數、十六進制數和科學計數法表示的數字。但是,JavaScript 在內部將所有數字表示為 IEEE 754 浮點數,這意味著 JavaScript 數學運算並非 100% 精確。
  • JavaScript 定義了一個名為 Not-a-Number (NaN) 的數字,用於將非數字表示為數字。 NaN 是 JavaScript 中唯一一個不等於自身的數值,可以使用 isNaN() 函數進行測試。
  • JavaScript 有一些特性,例如帶符號的零,導致出現正零 ( 0) 和負零 (-0),它們被認為是不同的值,但 JavaScript 的比較運算符無法區分它們。在 JavaScript 中,除以零會產生 Infinity,而除以負零會產生 -Infinity。

數據類型是每種編程語言的重要組成部分,而數字也許是最重要的數據類型。畢竟,計算機實際上只是昂貴的計算器。像任何有價值的編程語言一樣,JavaScript 支持數值數據。但是,與 JavaScript 的許多其他方面一樣,數字也有一些細微之處,如果您不小心,可能會給您帶來麻煩。本文探討了數值數據及其一些特性。 注意:在閱讀本文之前,您應該對 JavaScript 數據類型有基本的了解

Number 類型

在 JavaScript 中,所有數字都使用 Number 數據類型表示。這包括整數、實數、十六進制數和科學計數法表示的數字。以下示例通過將 typeof 運算符應用於各種數字來驗證這一點。此示例中 typeof 的每次應用都返回 number。

typeof(100);
typeof(3.14);
typeof(0xDEADBEEF);
typeof(7.89e2);
登入後複製
登入後複製

在前面的示例中,數字採用了各種格式。但是,在內部,所有 JavaScript 數字實際上都表示為 IEEE 754 浮點數。這很重要,因為它意味著 JavaScript 沒有整數的概念,儘管該語言有 parseInt() 函數。這也意味著 JavaScript 數學運算並非 100% 精確。例如,考慮以下表達式。

(0.1 + 0.2) === 0.3
登入後複製
登入後複製

如果您不熟悉浮點數,您肯定期望此表達式計算結果為 true。畢竟,0.1 0.2 等於 0.3。但是,由於浮點數的工作方式,其和實際上是 0.30000000000000004。差異很小,但這足以導致整個表達式的計算結果為 false。

正零和負零

IEEE 754 標準的另一個特性是帶符號的零。這導致出現兩個零——正零, 0,和負零,-0。這可能看起來很奇怪,但樂趣才剛剛開始。顯然,這兩個是不同的值,否則就只有一個零了。但是,如果您顯示這兩個零中的任何一個,符號都會被刪除。例如,以下代碼嘗試並排顯示這兩個零值。

typeof(100);
typeof(3.14);
typeof(0xDEADBEEF);
typeof(7.89e2);
登入後複製
登入後複製

更糟糕的是,JavaScript 的比較運算符似乎也無法區分這兩個值,如下例所示。

(0.1 + 0.2) === 0.3
登入後複製
登入後複製

這個問題有一個相當簡單的解決方法。在 JavaScript 中,除以零會產生 Infinity。同樣,除以負零會產生 -Infinity。因此,要確定一個數字是否等於 -0,我們必須檢查它是否為零,然後使用它作為分母進行除法,並檢查 -Infinity,如下所示。

alert((+0) + " " + (-0));
// 显示 0 0
登入後複製

Not-a-Number (NaN)

JavaScript 實際上定義了一個名為 Not-a-Number (NaN) 的數字。 NaN 是一個虛假的值,用於將非數字表示為數字。這個值很有趣,因為它的名稱本身就排除了它是數字的可能性,但是 typeof(NaN) 是 number。 NaN 也很有趣,因為它是在 JavaScript 中唯一一個不等於自身的數值。例如,以下代碼將返回 false。

alert((+0 === -0));
// 显示 true
alert((-0 === +0)); // 显示 true
登入後複製

您可以使用 isNaN() 函數測試 NaN,而不是使用比較運算符,如下所示。

function isNegativeZero(x) {
  return (x === 0 && (1/x) === -Infinity);
}
登入後複製

但是,isNaN() 也很有趣,因為它可能會產生誤導。如果您傳入一個可以強制轉換為數字的值,isNaN() 將返回 false。在以下示例中,isNaN() 使用幾個明顯不是數字的值進行調用。但是,每次調用都返回 false。

alert((NaN === NaN));
// 显示 false
登入後複製

檢查 NaN 的更好方法是利用它不等於自身這一事實。以下函數使用嚴格不等式測試 NaN。此函數僅對值 NaN 返回 true。

isNaN(1);
// 返回 false
isNaN(NaN);
// 返回 true
登入後複製

其他有趣的時刻

還有一些其他情況可能會導致數字出現問題。首先,您應該注意舊的瀏覽器,它們允許將 Infinity、NaN 和 undefined 等全局屬性重新定義為新值。例如,如果經常使用 NaN,以下代碼可能會產生很多問題。幸運的是,現代瀏覽器會忽略對前面提到的屬性的賦值。嚴格模式更進一步,將這些靜默故障轉換為錯誤。

isNaN(true);
isNaN(false);
isNaN("");
isNaN(null);
// 全部返回 false
登入後複製

另一個有趣的診斷錯誤來自添加數字和字符串。如下所示是一個示例。在這種情況下,字符串連接會覆蓋加法。這會導致 foo 被轉換為字符串“100”。最終結果是字符串“1001”,這與預期的值 101 大相徑庭。這種類型的錯誤比您想像的更常見,並且往往在讀取用戶輸入時發生。

function isNotANumber(x) {
  return x !== x;
}
登入後複製

結論

本文探討了 JavaScript 中數字的一些特性。希望您現在了解這些問題是如何產生的,以及如何避免它們。而且,儘管您可能不會經常遇到像負零這樣的情況,但至少現在您已經做好了準備。

關於 JavaScript 數字的常見問題 (FAQ)

在 JavaScript 中,將數字除以零會發生什麼?

在 JavaScript 中,當您將數字除以零時,結果是 Infinity。這是因為任何數字除以零在數學上都是未定義的,但 JavaScript 出於實際目的將其表示為 Infinity。但是,如果您將零除以零,則結果為 NaN (Not a Number),因為此運算在數學中是不確定的。

JavaScript 如何處理 BigInt 除以零?

BigInt 是 JavaScript 中的一個內置對象,它提供了一種表示大於 2^53-1 的整數的方法,這是 JavaScript 可以使用 Number 原語可靠地表示的最大數字。如果您嘗試將 BigInt 除以零,JavaScript 將拋出 RangeError,指示該操作無效。

如何在 JavaScript 中防止或處理除以零錯誤?

您可以在 JavaScript 中使用條件語句在執行除法運算之前檢查分母是否為零來防止或處理除以零錯誤。如果分母為零,您可以決定如何處理它,例如,返回特定值或顯示錯誤消息。

為什麼 JavaScript 中 0 除以 0 為 NaN?

在數學中,表達式 0/0 是未定義的,因為它沒有明確的、確定的值。在 JavaScript 中,未定義的數學運算會導致 NaN (Not a Number)。因此,當您在 JavaScript 中將零除以零時,結果為 NaN。

JavaScript 中 NaN 和 Infinity 有什麼區別?

在 JavaScript 中,NaN (Not a Number) 和 Infinity 是特殊的數值。 NaN 表示不是合法數字的值,通常是由於未定義或不確定的數學運算造成的。另一方面,Infinity 表示大於任何可能數字的數字,通常是由於將數字除以零造成的。

如何檢查 JavaScript 中的結果是否為 NaN?

您可以使用 JavaScript 中的 isNaN() 函數來檢查結果是否為 NaN。如果參數為 NaN,此函數返回 true,否則返回 false。

如何檢查 JavaScript 中的結果是否為 Infinity?

您可以使用 JavaScript 中的 isFinite() 函數來檢查結果是否為有限數字。如果參數為正無窮大或負無窮大,此函數返回 false,否則返回 true。

JavaScript 中 Number 原語有什麼意義?

JavaScript 中的 Number 原語用於表示數值。它可以表示整數值以及浮點數。但是,它只能可靠地表示最多 2^53-1 的數字。

如何在 JavaScript 中處理大數字?

為了處理超過 JavaScript 安全整數限制的大數字,您可以使用 BigInt 對象。 BigInt 允許您表示大於 2^53-1 的整數。

JavaScript 中的 RangeError 是什麼?

當值不在預期範圍內時,JavaScript 會拋出 RangeError。例如,嘗試將 BigInt 除以零會導致 RangeError。

以上是JavaScript號碼的樂趣的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板