目錄
在 JavaScript 中,將數字除以零會發生什麼?
JavaScript 如何處理 BigInt 除以零?
如何在 JavaScript 中防止或處理除以零錯誤?
為什麼 JavaScript 中 0 除以 0 為 NaN?
JavaScript 中 NaN 和 Infinity 有什麼區別?
如何檢查 JavaScript 中的結果是否為 NaN?
如何檢查 JavaScript 中的結果是否為 Infinity?
JavaScript 中 Number 原語有什麼意義?
如何在 JavaScript 中處理大數字?
JavaScript 中的 RangeError 是什麼?
首頁 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

熱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

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1229
24
神秘的JavaScript:它的作用以及為什麼重要 神秘的JavaScript:它的作用以及為什麼重要 Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的演變:當前的趨勢和未來前景 JavaScript的演變:當前的趨勢和未來前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript引擎:比較實施 JavaScript引擎:比較實施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript:探索網絡語言的多功能性 JavaScript:探索網絡語言的多功能性 Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

如何使用Next.js(前端集成)構建多租戶SaaS應用程序 如何使用Next.js(前端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

如何安裝JavaScript? 如何安裝JavaScript? Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

See all articles