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

为什么 parseInt 在第二种情况下返回 1?三者不应该返回相同的结果吗?

4

3 回答 3

5
  1. 1e1是一个数字文字,其计算结果为10; parseInt()看到10并高兴地返回。
  2. '1e1'是一个字符串,并且parseInt()不识别指数符号,因此它在第一个字母处停止。
  3. '1e1'作为一个字符串在解析为浮点数时非常好。

奖励parseInt('1e1', 16)返回481,将其解析为 3 位十六进制数。

于 2015-07-30T20:04:38.550 回答
1

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

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

于 2015-07-30T20:12:01.550 回答
0

要了解区别,我们必须阅读parseIntparseFloat的 ecma 官方文档

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

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

parseInt 只需要一个整数值(1、10、28 等),但 parseFloat 需要数字。因此,在 parseFloat 中,string"1e1"会自动转换为 Number。

parseInt('1e1'); // 1

parseFloat('1e1'); // 10
于 2016-04-15T11:36:48.347 回答