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

JavaScript號碼的樂趣

Feb 24, 2025 am 10:17 AM

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
Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架:為現代網絡開發提供動力JavaScript框架:為現代網絡開發提供動力May 02, 2025 am 12:04 AM

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

JavaScript,C和瀏覽器之間的關係JavaScript,C和瀏覽器之間的關係May 01, 2025 am 12:06 AM

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

node.js流帶打字稿node.js流帶打字稿Apr 30, 2025 am 08:22 AM

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python vs. JavaScript:性能和效率注意事項Python vs. JavaScript:性能和效率注意事項Apr 30, 2025 am 12:08 AM

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript的起源:探索其實施語言JavaScript的起源:探索其實施語言Apr 29, 2025 am 12:51 AM

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

幕後:什麼語言能力JavaScript?幕後:什麼語言能力JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來:趨勢和預測Python和JavaScript的未來:趨勢和預測Apr 27, 2025 am 12:21 AM

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境