美文网首页程序员让前端飞
为什么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