根据IEEE754中64位浮点数的定义,当指数部分达到1024时候即表示Infinity。于是
<script>
for(var i=1;i<Infinity;i*=2)
console.log(Math.round(Math.log(i)/Math.LN2));
</script>
这个代码不会进入死循环,它可以正常工作并输出0到1023的数字。但i到了21024时就不再小于Infinity了,于是退出循环。所以字面上的无穷大也就那么回事嘛,实际上没多大。另外,JavaScript中还有一个Number.MAX_VALUE,这是啥?从名字就可以看出,它表示64位的IEEE754浮点数可以表示的最大值嘛。只要稍微思考下,这个值我们也可以描述。既然是最大值,那么指数部分就是1023嘛,其它52位全部用1来填充即可。于是有
<script>
var a=Math.pow(2,53)-1, //底数部分的52位全部填充1
b=Math.pow(2,1023-52); //指数部分1023位,减掉底数已经分配的位
alert(a*b==Number.MAX_VALUE); //弹出 true
</script>
总之,这些看似大的离谱的数字,只要对IEEE754浮点数有所理解就完全可以秒杀它们。
Infinity-Number.MAX_VALUE === Infinity