做者: Dmitri Pavlutin
譯者:前端小智
來源:dmitripavlutin
點贊再看,養成習慣本文
GitHub
https://github.com/qq44924588... 上已經收錄,更多往期高贊文章的分類,也整理了不少個人文檔,和教程資料。歡迎Star和完善,你們面試能夠參照考點複習,但願咱們一塊兒有點東西。javascript
爲了保證的可讀性,本文采用意譯而非直譯。前端
Infinity
(無窮大)在 JS 中是一個特殊的數字,它的特性是:它比任何有限的數字都大,若是不知道 Infinity
, 咱們在一些運算操做遇到時,就會以爲頗有意思。java
如今咱們來看看 JS 中的Infinity
屬性,瞭解用例並解決一些常見的陷阱。git
無窮能夠分爲兩種,正無窮和負無窮,JS 中對應的表示方式爲:+Infinity
(或者Infinity
) 和 -Infinity
。github
這意味着Infinity
和-Infinity
(小於任何有限數的數字)都是number
類型的特殊值:面試
typeof Infinity; // => 'number' typeof -Infinity; // => 'number'
Infinity
是全局對象的屬性:算法
window.Infinity; // => Infinity
另外,Number
函數也有兩個屬性來表示正負無窮大:數組
Number.POSITIVE_INFINITY; // => Infinity Number.NEGATIVE_INFINITY; // => -Infinity
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
負無窮小於任何有限數。
將-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
幸運的是,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
當咱們須要初始化涉及數字比較的計算時,無窮值就很是方便。例如,在數組中搜索最小值時:
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()
迭代中,最小值成爲第一項。
咱們極可能不會常常使用Infinity
值。 可是,值得知道什麼時候會出現Infinity
值。
假設 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
JSON.stringify()
將Infinity
數字序列化爲null
。
const worker = { salary: Infinity }; JSON.stringify(worker); // => '{ "salary": null }'
salary
屬性值爲Infinity
可是當字符串化爲JSON時,"salary"
值將變爲null
。
Number.MAX_VALUE
是 JS 中最大的浮點數。
爲了使用甚至大於Number.MAX_VALUE
的數字,JS 將該數字轉換爲Infinity
:
2 * Number.MAX_VALUE; // => Infinity Math.pow(10, 1000); // => Infinity
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
。 若是嘗試肯定一個空數組的最大值或最小值,那結果後面人感到意外。
JS中的Infinity
表示無窮數的概念。 任何有限數均小於Infinity
,而任何有限數均大於-Infinity
。
比較 JS 中的無窮值很容易:Infinity === Infinity
爲 true
。特殊的函數Number.isFinite()
肯定提供的參數是不是一個有限的數字。
在涉及數字比較的算法時,可使用Infinite
初始化變量,用例是尋找數組的最小值。
解析來自輸入的數字時,必須當心Infinity
:Number('Infinity')
,parseFloat('Infinity')
返回實際的Infinity
。 當使用JSON.stringify()
序列化時,Infinity
變爲null
。
原文:https://dmitripavlutin.com/in...
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
文章每週持續更新,能夠微信搜索「 大遷世界 」第一時間閱讀和催更(比博客早一到兩篇喲),本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,整理了不少個人文檔,歡迎Star和完善,你們面試能夠參照考點複習,另外關注公衆號,後臺回覆福利,便可看到福利,你懂的。