parseInt(1e1); //10
parseInt('1e1'); //1
parserFloat('1e1') //10
为什么 parseInt 在第二种情况下返回 1?三者不应该返回相同的结果吗?
parseInt(1e1); //10
parseInt('1e1'); //1
parserFloat('1e1') //10
为什么 parseInt 在第二种情况下返回 1?三者不应该返回相同的结果吗?
1e1
是一个数字文字,其计算结果为10
; parseInt()
看到10
并高兴地返回。'1e1'
是一个字符串,并且parseInt()
不识别指数符号,因此它在第一个字母处停止。'1e1'
作为一个字符串在解析为浮点数时非常好。奖励:parseInt('1e1', 16)
返回481
,将其解析为 3 位十六进制数。
当您尝试解析字符串时,仅返回字符串中的第一个数字。在http://www.w3schools.com/jsref/jsref_parseint.asp检查函数规范
另外,您可以自己测试一下:
parseInt('2e1')
-returns 2
parseInt('3e2')
-returns3
要了解区别,我们必须阅读parseInt和parseFloat的 ecma 官方文档
... parseInt可能仅将字符串的前导部分解释为整数值;它忽略任何不能被解释为整数表示法一部分的字符,并且没有给出任何此类字符被忽略的迹象......
... parseFloat可能仅将字符串的前导部分解释为数字值;它忽略任何不能被解释为十进制文字符号的一部分的字符,并且没有给出任何此类字符被忽略的迹象......
parseInt 只需要一个整数值(1、10、28 等),但 parseFloat 需要数字。因此,在 parseFloat 中,string"1e1"
会自动转换为 Number。
parseInt('1e1'); // 1
parseFloat('1e1'); // 10