正在玩JS并注意到这一点。
为什么parseInt(1e+21)
返回1
而parseInt(1e+20)
返回100000000000000000000
? parseInt(10e+20)
还会返回1
吗?
为什么parseInt(1.7976931348623157E+10308);
会在NaN
返回parseFloat(1.7976931348623157E+10308)
时返回Infinity
?
甚至制作了一个斐波那契序列,任何具有+21
指数的值只返回第一个数字:
parseFloat()
将返回正确的数字,直到无限。
Fibonacci demo (int : parseInt() : parseFloat())
(在Chrome中测试)
答案 0 :(得分:3)
parseInt
和parseFloat
应该解析字符串并将其转换为Number
s。因此,当您向它们传递Number
时,它会被解释器强制转换为字符串。因此,至少在Firefox中,"" + 1e+20
输出"100000000000000000000"
和"" + 1e+21
输出"1e+21"
。
让我们阅读parseInt
的{{3}}:
如果parseInt遇到的字符不是指定基数中的数字,它会忽略它和所有后续字符并返回解析到该点的整数值
所以parseInt("1.whatever")
返回1
,parseInt("32.231e+something")
返回32。
parseFloat
必须发生类似的事情。
弱打字的错误。 IMO在做你做的事情时的正确行为就是抛出异常。