Js中的無窮數(Infinity)


為了保證的可讀性,本文采用意譯而非直譯。

Infinity(無窮大)在 js 中是一個特殊的數字,它的特性是:它比任何有限的數字都大,如果不知道 Infinity, 我們在一些運算操作遇到時,就會覺得很有意思。

現在我們來看看 js 中的Infinity 屬性,了解用例並解決一些常見的陷阱。

 

1.Infinity(無窮)的定義

無窮可以分為兩種,正無窮和負無窮,JS 中對應的表示方式為:+Infinity(或者Infinity) 和 -Infinity。

這意味着Infinity和-Infinity(小於任何有限數的數字)都是number類型的特殊值:

typeof Infinity; // => 'number' typeof -Infinity; // => 'number' 

Infinity 是全局對象的屬性:

window.Infinity; // => Infinity 

另外,Number函數也有兩個屬性來表示正負無窮大:

Number.POSITIVE_INFINITY; // => Infinity Number.NEGATIVE_INFINITY; // => -Infinity 

 

2. Infinity 的特性

Infinity比任何有限數都大。

舉幾個例子 Look Look:

Infinity > 100; // => true Infinity > Number.MAX_SAFE_INTEGER; // => true Infinity > Number.MAX_VALUE; // => true 

Infinity 在加法、乘法和除法等算術運算中用作操作數時會產生有趣的效果:

Infinity + 1; // => Infinity Infinity + Infinity; // => Infinity Infinity * 2; // => Infinity Infinity * Infinity; // => Infinity Infinity / 2; // => Infinity 

一些Infinity 的運算得到有限的數:

10 / Infinity; // => 0 

一個有限的數除以0得到 Infinity 結果:

2 / 0; // => Infinity 

對無窮數進行概念上不正確的運算會得到NaN。 例如,不能除以無限數,也無法確定無限數是奇數還是偶數:

Infinity / Infinity; // => NaN Infinity % 2; // => NaN 

2.1 負無窮

負無窮小於任何有限數

將-Infinity 與一些有限數字進行比較:

-Infinity < 100; // => true -Infinity < -Number.MAX_SAFE_INTEGER; // => true -Infinity < -Number.MAX_VALUE; // => true 

同時,負無窮小於正無窮:

-Infinity < Infinity; // => true 

當使用不同操作符操作數時,也可能會得到負無窮:

Infinity * -1; // => -Infinity Infinity / -2; // => -Infinity -2 / 0; // => -Infinity

 

3.判斷無窮

幸運的是,Infinity等於相同符號的Infinity:

Infinity === Infinity; // => true -Infinity === -Infinity; // => true 

但前面的符號不一樣就不相等,就也很好理解:

Infinity === -Infinity; // => false 

JSt有一個特殊的函數Number.isFinite(value),用於檢查提供的值是否有限數:

Number.isFinite(Infinity); // => false Number.isFinite(-Infinity); // => false Number.isFinite(999); // => true 

 

4. 無窮的的使用情況

當我們需要初始化涉及數字比較的計算時,無窮值就非常方便。例如,在數組中搜索最小值時:

function findMin(array) { let min = Infinity; for (const item of array) { min = Math.min(min, item); } return min; } findMin([5, 2, 1, 4]); // => 1 

min變量使用Infinity初始化。 在第一次for()迭代中,最小值成為第一項。

 

5. Infinity 的的一些坑

我們很可能不會經常使用Infinity值。 但是,值得知道何時會出現Infinity值。

5.1. 解析數據

假設 JS 使用一個輸入(POST請求、輸入字段的值等)來解析一個數字。在簡單的情況下,它會工作得很好:

parseFloat('10.5'); // => 10.5 parseFloat('ZZZ'); // => NaN 

這里需要小心的,parseFloat()將'Infinity'字符串解析為實際的Infinity數:

parseFloat('Infinity'); // => Infinity 

另一個是使用parseInt()來解析整數,它無法將'Infinity'識別為整數:

parseInt('10', 10); // => 10 parseInt('Infinity', 10); // => NaN 

5.2 JSON 序列化

JSON.stringify()將Infinity數字序列化為null。

const worker = {
 salary: Infinity }; JSON.stringify(worker); // => '{ "salary": null }' 

salary 屬性值為Infinity但是當字符串化為JSON時,"salary"值將變為null。

5.3 最大數溢出

Number.MAX_VALUE是 JS 中最大的浮點數。

為了使用甚至大於Number.MAX_VALUE的數字,JS 將該數字轉換為Infinity:

2 * Number.MAX_VALUE; // => Infinity Math.pow(10, 1000); // => Infinity 

5.4 Math 函數

JS 中Math命名空間的某些函數可以返回Infinity:

const numbers = [1, 2]; const empty = []; Math.max(...numbers); // => 2 Math.max(...empty); // => -Infinity Math.min(...numbers); // => 1 Math.min(...empty); // => Infinity 

在不帶參數的情況下調用Math.max()時,返回-Infinity,而Math.min()則相應地返回Infinity。 如果嘗試確定一個空數組的最大值或最小值,那結果后面人感到意外。

資源搜索網站大全 http://www.szhdn.com

總結

JS中的Infinity表示無窮數的概念。 任何有限數均小於Infinity,而任何有限數均大於-Infinity。

比較 JS 中的無窮值很容易:Infinity === Infinity 為 true。特殊的函數Number.isFinite()確定提供的參數是否是一個有限的數字。

在涉及數字比較的算法時,可以使用Infinite初始化變量,用例是尋找數組的最小值。

解析來自輸入的數字時,必須小心Infinity:Number('Infinity'),parseFloat('Infinity')返回實際的Infinity。 當使用JSON.stringify()序列化時,Infinity變為null。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM