【问题标题】:Why this loop freezes my browser?为什么这个循环会冻结我的浏览器?
【发布时间】:2015-05-15 22:04:11
【问题描述】:

为什么浏览器会挂起执行这个?

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

【问题讨论】:

  • 因为为什么有人要溢出?
  • 因为那些整数大得离谱。

标签: javascript integer-overflow


【解决方案1】:

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

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

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

【讨论】:

  • 你打败了我。很好的答案。
  • 好的。我应该从 9007199254740991 开始 :)
  • @Ruslanas:不,你必须在9007199254740991结束
猜你喜欢
  • 2017-02-26
  • 2016-01-24
  • 2015-06-21
  • 2017-04-26
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多