亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中Infinity(無(wú)窮數(shù))的使用和注意事項(xiàng)

 更新時(shí)間:2022年04月01日 14:54:49   作者:CUGGZ  
Infinity(無(wú)窮大)在 JS 中是一個(gè)特殊的數(shù)字,它的特性是它比任何有限的數(shù)字都大,如果不知道 Infinity,我們?cè)谝恍┻\(yùn)算操作遇到時(shí),就會(huì)覺(jué)得很有意思,下面這篇文章主要給大家介紹了關(guān)于JavaScript中Infinity(無(wú)窮數(shù))的使用和注意事項(xiàng),需要的朋友可以參考下

前言

JavaScript 中的 Infinity 是一個(gè)可以應(yīng)用于任何變量的數(shù)值,表示無(wú)窮大。下面就來(lái)看看 Infinity 是如何工作的,以及使用時(shí)的注意事項(xiàng)。

1. Infinity 概念

Infinity 是全局對(duì)象的一個(gè)屬性,即它是一個(gè)全局變量:

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

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

數(shù)字 Infinity 是 JavaScript 中的一個(gè)特殊值,它的值約為 1.79e+308 或 2¹?²?——JavaScript 中可以存儲(chǔ)為數(shù)字類型的最大值。

let bigNumber = 1e308,
? ? biggerNumber = 1e309;

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

根據(jù)規(guī)范,Infinity 表示所有大于 1.7976931348623157e+308 的值:

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

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

我們可以在瀏覽器的控制臺(tái)輸入9,當(dāng)輸入308位時(shí),結(jié)果還是1e+308,當(dāng)輸入309位時(shí),就會(huì)打印出 Infinity:

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

2. Infinity 正負(fù)

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

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

可以通過(guò)以下方式來(lái)得到 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

可以通過(guò)以下方式來(lái)得到 -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

將正數(shù)除以 Infinity 會(huì)得到 0;Infinity 除以 Infinity 會(huì)得到 NaN;正數(shù)除以 -Infinity 或負(fù)數(shù)除以 Infinity 得到 -0:

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

3. Infinity 計(jì)算

Infinity 的行為基本上類似于數(shù)學(xué)上的無(wú)窮大,加、減或乘以它仍然是 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

對(duì)于 JavaScript 中所有的數(shù)字,即使是強(qiáng)大的 Infinity,使用 NaN 執(zhí)行數(shù)學(xué)運(yùn)算都得到 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 中,對(duì)于任意大的整數(shù)值,有 BigInt 原始類型。但是,BigInt 不能很好地與 Infinity 配合使用,因?yàn)?Infinity 是 JavaScript 原始類型 number,不能與 BigInt 混合使用。

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

// BigInts 用數(shù)字后面的 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 轉(zhuǎn)換為 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,因?yàn)樗梢允侨我獯笮?,并?JavaScript 中的最大安全整數(shù)只有 16 位長(zhǎng):
console.log(Number.MAX_SAFE_INTEGER) // 9007199254740991

5. Infinity 檢查

可以通過(guò)使用 == 或 === 將值與 Infinity 進(jìn)行比較來(lái)檢查 Infinity:

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

// ==將強(qiáng)制字符串轉(zhuǎn)換為數(shù)字,但===不會(huì):
console.log(Infinity == "Infinity") // true
console.log(Infinity === "Infinity") // false

// 使用除法運(yùn)算符將在比較之前強(qiáng)制執(zhí)行強(qiáng)制轉(zhuǎn)換:
console.log(Infinity == "1"/"0") // true
console.log(Infinity === "1"/"0") // true

// 當(dāng)強(qiáng)制轉(zhuǎn)換后值為NaN時(shí):
console.log(Infinity == "1/0") // false
console.log(Infinity === "1/0") // false

當(dāng)然,在處理 Infinity 時(shí),ES6 中的 Object.is() 與 === 運(yùn)算符的工作方式相同:

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

可以使用輔助函數(shù) Number.isFinite() 檢查值是否為有限數(shù)(不是 Infinity、-Infinity 或 NaN)。還有一個(gè)全局 isFinite() 函數(shù),它會(huì)執(zhí)行強(qiáng)制類型轉(zhuǎn)化,也就是它會(huì)先嘗試將值轉(zhuǎn)換為數(shù)字類型,然后再檢查它是否為有限數(shù)。

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. 注意事項(xiàng)

(1)max() 和 min()

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

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

(2)Infinity 作為默認(rèn)值

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

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

因?yàn)?Infinity 大于所有數(shù)字,所以除非數(shù)組中的所有數(shù)字都超過(guò) Infinity 閾值,否則結(jié)果不會(huì)有任何問(wèn)題。

(3)轉(zhuǎn)換為 JSON 時(shí)

在處理 JSON 數(shù)據(jù)時(shí),如果使用 JSON.stringify() 將 JavaScript 對(duì)象轉(zhuǎn)換為有效的 JSON 字符串,Infinity將會(huì)被轉(zhuǎn)化為null:

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

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

打印結(jié)果如下:

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

(4)parseFloat() 和 parseInt()

parseFloat() 用來(lái)解析一個(gè)字符串,并返回一個(gè)浮點(diǎn)數(shù)。parseInt() 用來(lái)解析一個(gè)字符串,并返回一個(gè)整數(shù)。parseFloat() 可以正確解析Infinity, 而 parseInt() 無(wú)法識(shí)別 Infinity :

總結(jié)

到此這篇關(guān)于JavaScript中Infinity(無(wú)窮數(shù))的文章就介紹到這了,更多相關(guān)js的無(wú)窮數(shù)Infinity內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論