JavaScript中的Infinity是一个可以应用于任何变量的数值,代表无穷大。下面我们就来看看Infinity是如何工作的以及使用时的注意事项。1.Infinity概念Infinity是全局对象的一个??属性,即是一个全局变量:console.log(window.Infinity);//Infinityconsole.log(window.Infinity>100);//trueconsole.log(window.Infinity<100);//falseInfinity的初始值为Number.POSITIVE_INFINITY。无穷大(正无穷大)大于任何值。在数学上,此值的行为与无穷大相同。例如,任何正数乘以Infinity等于Infinity,任何数除以Infinity等于0。在ECMAScript5的规范中,Infinity是只读的,即不可写、不可枚举或不可配置。数值无穷大是JavaScript中的一个特殊值,其值大约为1.79e+308或21?2?——可以在JavaScript中存储为数字的最大值。让bigNumber=1e308,biggerNumber=1e309;console.log(bigNumber);//1e+308console.log(biggerNumber);//Infinity根据规范,Infinity表示所有大于1.7976931348623157e+308的值:letlargeNumber=1.79769331547e+308,largerNumber=1.7976931348623157e+309;console.log(largeNumber);//1.7976931348623157e+308console.log(largerNumber);//Infinity我们可以在浏览器的控制台输入9,当输入308位时,结果还是1e+308,当输入309位时,会打印出Infinity:所有浏览器都支持Infinity:2.Infinity为正或消极的。无穷大是正数还是负数。Infinity表示无穷大,-Infinity表示无穷小。超过1.797693134862315E+308的值是无穷大,小于-1.797693134862316E+308的值是无穷小。控制台日志(1.7976931348623157e+309);//Infinityconsole.log(-1.7976931348623157e+309);//-Infinity可以通过以下方式获得:console.log(Infinity)//Infinityconsole.log(Number.POSITIVE_INFINITY)//Infinityconsole.log(Math.pow(2,1024))//Infinityconsole.log(1.8e+308)//Infinityconsole.log(1/0)//无限可以通过-Infinity获得:console.log(-Infinity)//-Infinityconsole.log(Number.NEGATIVE_INFINITY)//-Infinityconsole.log(-1*Math.pow(2,1024))//-Infinityconsole.log(-1.8e+308)//-Infinityconsole.log(1/-0)//-Infinity将一个正数除以Infinity得到0;无穷大除以无穷大得到NaN;将正数除以-Infinity或将负数除以Infinity得到-0:console.log(1/Infinity)//0console.log(Infinity/Infinity)//NaNconsole.log(1/-Infinity)//-03。Infinity计算Infinity的行为基本上类似于数学上的无穷大,加、减或乘它仍然是Infinity:console.log(Infinity+3)//Infinityconsole.log(Infinity-3)//Infinityconsole.log(Infinity*3)//Infinityconsole.log(Infinity/3)//Infinityconsole.log(Math.pow(Infinity,2))//Infinityconsole.log(Infinity+Infinity)//Infinityconsole.log(Infinity-Infinity)//NaNconsole.log(Infinity*Infinity)//NaNconsole.log(Infinity/Infinity)//NaN对于JavaScript中的所有数字,即使是强大的Infinity,使用NaN进行数学运算也会得到NaN:console.log(Infinity+NaN)//NaNconsole.log(Infinity-NaN)//NaNconsole.log(Infinity*NaN)//NaNconsole.log(Infinity/NaN)//NaNconsole.log(Math.pow(Infinity,NaN))//NaN4。Infinity和BigInt在JavaScript中,对于任意大的整数值,有BigInt原始类型。但是,BigInt不能很好地与Infinity配合使用,因为Infinity是JavaScript原始类型编号,不能与BigInt混合使用。try{console.log(37/0)}catch(e){console.log(e)}//Infinity//BigInts由数字后的n表示:try{console.log(37n/0)}catch(e){console.log(e)}//类型错误:“无法将BigInt转换为数字”try{console.log(37/0n)}catch(e){console.log(e)}//类型错误:"can'tconvertBigInttonumber"try{console.log(37n/0n)}catch(e){console.log(e)}//RangeError:"BigIntdivisionbyzero"//可以将BigInt转换为数字:try{console.log(Infinity+37n)}catch(e){console.log(e)}//TypeError:"can'tconvertBigInttonumber"try{console.log(Infinity+Number(37n))}catch(e){console.log(e)}//Infinity//可能不需要BigInt,因为它们可以是任意大小,并且JavaScript中最大的安全整数只有16位长:console.log(Number.MAX_SAFE_INTEGER)//90071992547409915.InfinityCheckInfinity可以通过使用==或===将值与Infinity进行比较来检查Infinity:console.log(Infinity==1/0)//trueconsole.log(Infinity===1/0)//true//==将字符串强制转换为数字,但是===不会:console.log(Infinity=="Infinity")//trueconsole.log(Infinity==="Infinity")//false//使用除法运算符会在比较前强制转换:console.log(Infinity=="1"/"0")//trueconsole.log(Infinity==="1"/"0")//true//当强制转换后值为NaN时:console.log(Infinity=="1/0")//falseconsole.log(Infinity==="1/0")//false当然,在处理Infinity时,ES6中的Object.is()和===运算符同样的方式:console.log(Object.is(Infinity,1/0))//trueconsole.log(Infinity===1/0)//trueconsole.log(Infinity==1/0)//trueconsole.log(Object.is(Infinity,"Infinity"))//falseconsole.log(Infinity==="Infinity")//falseconsole.log(Infinity=="Infinity")//true可以使用辅助函数Number。isFinite()checksifthevalueisafinitenumber(notInfinity,-InfinityorNaN)还有一个全局的isFinite()函数会执行强制转换,即它首先尝试将值转换为数字类型,然后再进行检查是不是有限数。控制台日志(isFinite(45));//trueconsole.log(isFinite(-45));//trueconsole.log(isFinite('45'));//trueconsole.log(isFinite('-75'));//trueconsole.log(isFinite(Infinity));//falseconsole.log(isFinite(1.7976931348623157e+308));//trueconsole.log(isFinite(1.7976931348623157e+309));//错误6。注意事项(1)max()和min()如果没有传入值,Math.max()(返回传入值的最大值)会返回-Infinity,Math.min()(返回最小值)传入的值)将返回Infinity。console.log(Math.max());//-Infinityconsole.log(Math.min());//Infinity(2)Infinity作为默认值因为Infinity大于所有数字,它正在检查数组中的最小数字可能在函数中有用:functionfindMinimum(numbers){letmin=Infinity;for(constnofnumbers){if(n
