关于js的两个问题?

0.009*100 //?????输出0.8999999999999999999
for(var i=0; ; i++) {console.log(i)} //会无限执行,为什么,中间是空的那就是不满足条件啊
阅读 2.9k
6 个回答

第一个问题,建议一看一下浮点数,这个百度一搜很多的
第二个问题,因为第二个参数是条件,而你没有写条件,那当然能一直执行了,这就相当于过安检,它有一套规则,你符合了能过去,反之过不去,现在安检没了,当然都能过去了

  1. js浮点运算bug 解决方法

  2. for(var i=0; false; i++) {console.log(i)} 默认是true吧

想到我的初中数学老师讲的数学问题:
0.3333333...*3=0.9999999...
1/3*3=1
可能在尽头他们就是相等的。

第一个是乘法浮点数问题,这个是计算机的问题
第二个,你没限制i的大小,相当于i=0,true,i++,就无限执行

问题一:JS无法将所有的浮点数都一一表示出来,而是尽量将最接近的结果作为计算的结果;
问题二:for循环的第二个语句块表示运行循环的条件,如果您省略了该语句块 2,那么必须在循环内提供 break。否则循环就无法停下来。这样有可能令浏览器崩溃

第一个问题
Javascript采用了IEEE-745浮点数表示法(几乎所有的编程语言都采用),这是一种二进制表示法,可以精确地表示分数,比如1/21/81/1024。遗憾的是,我们常用的分数(特别是在金融的计算方面)都是十进制分数1/101/100等。二进制浮点数表示法并不能精确的表示类似0.1这样 的简单的数字。
第二个问题
默认就是true的,不是undefined

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题