成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 中 Infinity 的奇異世界

開發 前端
Infinity 的初始值是 Number.POSITIVE_INFINITY。Infinity(正無窮大)大于任何值。在數學上,這個值的行為與無窮大相同。

JavaScript 中的 Infinity 是一個可以應用于任何變量的數值,表示無窮大。下面就來看看 Infinity 是如何工作的,以及使用時的注意事項。

1. Infinity 概念

Infinity 是全局對象的一個屬性,即它是一個全局變量:

console.log(window.Infinity); // Infinity
console.log(window.Infinity > 100); // true
console.log(window.Infinity < 100); // false

Infinity 的初始值是 Number.POSITIVE_INFINITY。Infinity(正無窮大)大于任何值。在數學上,這個值的行為與無窮大相同。例如,任何正數乘以Infinity等于Infinity,任何數字除以Infinity等于 0。在 ECMAScript 5 的規范中, Infinity 是只讀的,即不可寫、不可枚舉或不可配置。

數字 Infinity 是 JavaScript 中的一個特殊值,它的值約為 1.79e+308 或 21?2?——JavaScript 中可以存儲為數字類型的最大值。

let bigNumber = 1e308,
biggerNumber = 1e309;

console.log(bigNumber); // 1e+308
console.log(biggerNumber); // Infinity

根據規范,Infinity 表示所有大于 1.7976931348623157e+308 的值:

let largeNumber = 1.7976931348623157e+308,
largerNumber = 1.7976931348623157e+309;

console.log(largeNumber); // 1.7976931348623157e+308
console.log(largerNumber); // Infinity

我們可以在瀏覽器的控制臺輸入9,當輸入308位時,結果還是1e+308,當輸入309位時,就會打印出 Infinity:

所有瀏覽器都是支持 Infinity 的:

2. Infinity 正負

Infinity 是有正負之分的,Infinity表示無窮大,-Infinity表示無窮小。超出 1.797693134862315E+308 的數值即為 Infinity,小于 -1.797693134862316E+308 的數值為無窮小。

console.log(1.7976931348623157e+309); // Infinity
console.log(-1.7976931348623157e+309); // -Infinity

可以通過以下方式來得到 Infinity:

console.log(Infinity)                 // Infinity
console.log(Number.POSITIVE_INFINITY) // Infinity
console.log(Math.pow(2,1024)) // Infinity
console.log(1.8e+308) // Infinity
console.log(1/0) // Infinity

可以通過以下方式來得到 -Infinity:

console.log(-Infinity)                 // -Infinity
console.log(Number.NEGATIVE_INFINITY) // -Infinity
console.log(-1*Math.pow(2,1024)) // -Infinity
console.log(-1.8e+308) // -Infinity
console.log(1/-0) // -Infinity

將正數除以 Infinity 會得到 0;Infinity 除以 Infinity 會得到 NaN;正數除以 -Infinity 或負數除以 Infinity 得到 -0:

console.log(1/Infinity) // 0
console.log(Infinity/Infinity) // NaN
console.log(1/-Infinity) // -0

3. Infinity 計算

Infinity 的行為基本上類似于數學上的無窮大,加、減或乘以它仍然是 Infinity:

console.log(Infinity + 3) // Infinity
console.log(Infinity - 3) // Infinity
console.log(Infinity * 3) // Infinity
console.log(Infinity / 3) // Infinity

console.log(Math.pow(Infinity, 2)) // Infinity

console.log(Infinity + Infinity) // Infinity
console.log(Infinity - Infinity) // NaN
console.log(Infinity * Infinity) // NaN
console.log(Infinity / Infinity) // NaN

對于 JavaScript 中所有的數字,即使是強大的 Infinity,使用 NaN 執行數學運算都得到 NaN:

console.log(Infinity + NaN) // NaN
console.log(Infinity - NaN) // NaN
console.log(Infinity * NaN) // NaN
console.log(Infinity / NaN) // NaN

console.log(Math.pow(Infinity, NaN)) // NaN

4. Infinity 和 BigInt

在 JavaScript 中,對于任意大的整數值,有 BigInt 原始類型。但是,BigInt 不能很好地與 Infinity 配合使用,因為 Infinity 是 JavaScript 原始類型 number,不能與 BigInt 混合使用。

try{console.log(37/0)} catch(e) {console.log(e)} // Infinity

// BigInts 用數字后面的 n 表示:
try{console.log(37n/0)} catch(e) {console.log(e)} // TypeError: "can't convert BigInt to number"
try{console.log(37/0n)} catch(e) {console.log(e)} // TypeError: "can't convert BigInt to number"
try{console.log(37n/0n)} catch(e) {console.log(e)} // RangeError: "BigInt division by zero"

// 可以將 BigInts 轉換為 Numbers:
try{console.log(Infinity+37n)} catch(e) {console.log(e)} // TypeError: "can't convert BigInt to number"
try{console.log(Infinity+Number(37n))} catch(e) {console.log(e)} // Infinity

// 可能不需要BigInts,因為它可以是任意大小,并且 JavaScript 中的最大安全整數只有 16 位長:
console.log(Number.MAX_SAFE_INTEGER) // 9007199254740991

5. Infinity 檢查

可以通過使用 == 或 === 將值與 Infinity 進行比較來檢查 Infinity:

console.log(Infinity == 1/0) // true
console.log(Infinity === 1/0) // true

// ==將強制字符串轉換為數字,但===不會:
console.log(Infinity == "Infinity") // true
console.log(Infinity === "Infinity") // false

// 使用除法運算符將在比較之前強制執行強制轉換:
console.log(Infinity == "1"/"0") // true
console.log(Infinity === "1"/"0") // true

// 當強制轉換后值為NaN時:
console.log(Infinity == "1/0") // false
console.log(Infinity === "1/0") // false

當然,在處理 Infinity 時,ES6 中的 Object.is() 與 === 運算符的工作方式相同:

console.log(Object.is(Infinity, 1/0)) // true
console.log(Infinity === 1/0) // true
console.log(Infinity == 1/0) // true

console.log(Object.is(Infinity, "Infinity")) // false
console.log(Infinity === "Infinity") // false
console.log(Infinity == "Infinity") // true

可以使用輔助函數 Number.isFinite() 檢查值是否為有限數(不是 Infinity、-Infinity 或 NaN)。還有一個全局 isFinite() 函數,它會執行強制類型轉化,也就是它會先嘗試將值轉換為數字類型,然后再檢查它是否為有限數。

console.log(isFinite(45)); // true
console.log(isFinite(-45)); // true
console.log(isFinite('45')); // true
console.log(isFinite('-75')); // true
console.log(isFinite(Infinity)); // false
console.log(isFinite(1.7976931348623157e+308)); // true
console.log(isFinite(1.7976931348623157e+309)); // false

6. 注意事項

(1)max() 和 min()

如果沒有傳入值,Math.max()(返回傳入值中的最大值)將返回 -Infinity,Math.min()(返回傳入值中的最小值)將返回Infinity。

console.log(Math.max()); // -Infinity
console.log(Math.min()); // Infinity

(2)Infinity 作為默認值

由于 Infinity 大于所有數字,因此它在檢查數組中的最小數字的函數中可能很有用:

function findMinimum(numbers) {
let min = Infinity;
for (const n of numbers) {
if (n < min) {
min = n
};
}
return min;
}

console.log(findMinimum([20, 6, 90])); // 6

因為 Infinity 大于所有數字,所以除非數組中的所有數字都超過 Infinity 閾值,否則結果不會有任何問題。

(3)轉換為 JSON 時

在處理 JSON 數據時,如果使用 JSON.stringify() 將 JavaScript 對象轉換為有效的 JSON 字符串,Infinity將會被轉化為null:

let myJSON = {
value1: 6,
value2: 'Example',
value3: Infinity,
value4: -Infinity,
value5: 1.7976931348623157e+309
};

console.log(JSON.stringify(myJSON, null, 2));

打印結果如下:

{
"value1": 6,
"value2": "Example",
"value3": null,
"value4": null,
"value5": null
}

(4)parseFloat() 和 parseInt()

parseFloat() 用來解析一個字符串,并返回一個浮點數。parseInt() 用來解析一個字符串,并返回一個整數。parseFloat() 可以正確解析Infinity, 而 parseInt() 無法識別 Infinity :

https://back-media.51cto.com/editor?id=705365/h6e90be6-cI8PYBfQ
責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2011-03-22 10:31:57

Java

2021-08-21 14:54:40

AMD開源項目Infinity Hu

2014-07-15 09:36:55

機器學習

2009-07-06 17:21:36

.NET中的多態

2010-02-01 10:30:13

Python世界

2021-09-29 23:05:32

人工智能機器人技術

2018-05-22 08:41:48

2021-09-30 22:52:30

人工智能機器人技術

2022-11-21 14:33:53

大數據數據存儲機器學習

2014-07-04 10:05:57

機器學習

2014-01-03 09:13:39

JavaScriptthis

2013-05-08 10:36:07

JavaScriptJS詳解JavaScrip

2021-05-27 07:54:21

Math.max()-Infinity參數

2017-02-08 10:54:38

JavaScriptVR世界

2023-09-28 14:40:23

工業4.0數字孿生

2019-07-15 08:06:00

物聯網Wi-FiIOT

2020-04-21 10:42:23

私有云多云云遷移

2020-07-29 09:13:28

JavaScript開發技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 福利视频一区二区 | 日本天天操 | 国产精品国产精品国产专区不片 | 免费国产一区 | 成人欧美一区二区三区在线播放 | 精品成人佐山爱一区二区 | 国产九九九九 | 狠狠操狠狠干 | 久久99精品久久久久久狂牛 | 欧美色性 | 一级免费毛片 | 国产高清一区二区三区 | 青青草网 | 亚洲精品久久久久久久不卡四虎 | 中文字幕成人 | 国产精品观看 | 久久毛片| 久久ww| 国产在线精品一区二区 | 伊人久久成人 | 精品一区二区三区日本 | 另类视频在线 | 国产精品久久久久久久免费大片 | 免费的色网站 | 精品国产一区探花在线观看 | 日批免费观看 | 久色激情 | 欧美精品福利视频 | 午夜精品视频 | 2021狠狠干 | 精品一区二区三区不卡 | 欧美精品一区在线 | 国产福利一区二区 | 亚洲精品国产成人 | 国产91一区二区三区 | 成人精品一区 | 国产一级视频在线播放 | 欧美一级片在线观看 | 久久综合九九 | 精品欧美一区二区三区久久久 |