美文网首页程序员让前端飞
为什么parseInt(0.0000008) === 8?

为什么parseInt(0.0000008) === 8?

作者: ITgecko | 来源:发表于2017-08-29 09:43 被阅读0次

    前言

    从函数本身出发

    • 这个出乎意料的结果似乎和IEEE 754浮点数标准并没有关系,而是parseInt函数本身的原因,先来看几个用parseInt方法将字符串转换为数字的例子:
    parseInt('   1   2323') // 1
    parseInt('  abc1abc2323') // NaN
    parseInt('  **1abc2323') // NaN
    parseInt('    1abc2323') // 1
    parseInt(' 12.9999') // 12
    parseInt("  0x11")  // 17
    
    • 从中可以看出几条规则:
      1.字符串左边的空格会被忽略掉
      2.从左到右依次取数字字符串,如果最左边以非数字开头则返回NaN
      3.取到第一个数字字符后继续,直到取到一个非数字的字符截止(包括小数点),将这个时候得到的数字字符串转换为数字
      4.以'0x'开头的字符串会做特殊处理表示将后续的数字转换为16进制的整数

    • 到这里可能有人问,代码上传入的是数字类型0.0000008,为什么要分析如何转换字符串类型的参数。那是因为调用parseInt方法时,会隐式地将传入的数字类型用toString方法转换为字符串!而将0.0000008调用toString的结果会是"8e-7",在javascript中,小于0.000001的浮点数会以科学计数法来表示,而这样的字符串参照上面的规则,自然得到的结果就是8了。

    结语

    相关文章

      网友评论

        本文标题:为什么parseInt(0.0000008) === 8?

        本文链接:https://www.haomeiwen.com/subject/rfqgdxtx.html