parseInt('1e1') 与 parseFloat('1e1')

parseInt('1e1') vs parseFloat('1e1')

parseInt(1e1); //10
parseInt('1e1'); //1
parserFloat('1e1') //10

为什么第二种情况是parseInt returns 1?三者不应该return一样的结果吗?

  1. 1e1 是一个计算结果为 10 的数字文字; parseInt() 看到 10 并且很高兴 returns 那。
  2. '1e1'是字符串,parseInt()不识别指数表示法,所以停在第一个字母。
  3. '1e1' 作为字符串在解析为浮点数时完全没问题。

Bonus: parseInt('1e1', 16) returns 481, 将其解析为 3 位十六进制数。

当您尝试解析字符串时,仅返回字符串中的第一个数字。检查 http://www.w3schools.com/jsref/jsref_parseint.asp

处的函数规范

另外,你可以自己测试一下: parseInt('2e1') - returns 2 parseInt('3e2') - returns 3

要了解差异,我们必须阅读 parseInt and parseFloat

的 ecma 官方文档

... parseInt 可能仅将字符串的前导部分解释为 整数值;它会忽略任何不能被解释为 整数 符号的一部分的字符,并且没有任何迹象表明任何此类字符都被忽略了...

... parseFloat 可能仅将字符串的前导部分解释为 数字值;它会忽略任何不能被解释为 十进制文字 符号的一部分的字符,并且没有任何迹象表明任何此类字符都被忽略了...

parseInt 只需要一个整数值(1、10、28 等),但 parseFloat 需要 Number。因此,string "1e1" 将在 parseFloat.

中自动转换为 Number
parseInt('1e1'); // 1

parseFloat('1e1'); // 10