为什么这个循环会冻结我的浏览器?

时间:2015-05-15 22:04:11

标签: javascript integer-overflow

为什么浏览器会挂起执行此操作?

for(var i= 9007199254740993;i<9007199254740994;i++) {
    console.log(i);
}

1 个答案:

答案 0 :(得分:7)

您尝试使用的整数大于2 ^ 53。 JavaScript无法准确表示这些整数。让我们看一下控制台:

> var i = 9007199254740993;
undefined
> i++
9007199254740992
> i++
9007199254740992
> i++
9007199254740992
...

如您所见,由于精度损失,i的值不会改变,因此条件将始终为true,从而导致无限循环。