Javascript parseInt()和parseFloat():第二个断言会失败吗?

Javascript parseInt()和parseFloat():第二个断言会失败吗?,javascript,parseint,proof,parsefloat,Javascript,Parseint,Proof,Parsefloat,我在各种上下文中使用parseInt和parseFloat已经有一段时间了,我想我知道这两种语言的所有细节。但最近我有一个奇怪的想法,到目前为止,我还没有找到确切的证据 考虑以下功能: function testProof(strInteger) { assert(strInteger === '' + parseInt(strInteger, 10)); assert(parseInt(strInteger, 10) === parseFloat(strInteger));

我在各种上下文中使用parseInt和parseFloat已经有一段时间了,我想我知道这两种语言的所有细节。但最近我有一个奇怪的想法,到目前为止,我还没有找到确切的证据

考虑以下功能:

function testProof(strInteger) {
    assert(strInteger === '' + parseInt(strInteger, 10));

    assert(parseInt(strInteger, 10) === parseFloat(strInteger));
}

// Sample calls...
testProof("5");
testProof("109");
testProof("-55");
首先,我们断言将输入转换为整数,然后再转换回字符串将再次生成原始字符串。这可以防止parseInt100bucks返回100的情况,并且还可以确保没有被转换截断的小数部分-我们希望确保输入实际上是一个整数,整数字符串

如果成功,那么我们断言parseInt…,10返回与parseFloat…相同的值

第一个断言失败的原因有很多:

输入不是整数1.5 输入具有前导零0050 输入有100美元 输入是指数表示法1e3,或者它太大以至于变成指数 输入不可分析,导致NaN 也许其他人?
但问题是:只要第一个断言通过,第二个断言会失败吗?换句话说,如果我们提前知道输入是字符串中的整数,可以解析float。。。作为parseInt…的替代品,10?不是说这是一个很好的替代品…:-P

实际上,只有使用此输入才能失败:

testProof("NaN");

但是如果你真的知道它是一个整数,为什么要测试呢?此外,parseFloat不能很好地替代parseInt,因为在很多情况下,您不知道它是否真的是整数而不是浮点。

虽然我不能提供证据,但JS对整数和浮点没有区别。parseFloat和parseInt之间的唯一区别是它们如何解释小数点之类的内容。如果输入字符串是正则表示法中的有效整数,尽管正如第一个断言所断言的那样,它们将始终产生相同的数值,这在JS中意味着它们也是相同的类型。

很好!我从来没有考虑过尝试一次真正的尝试。我同意,这可能是不应该做的事情;这更像是一种理论上的好奇,看看是否存在两种行为不同的边缘情况。@smitelli好吧,只有当你不知道字符串内部是什么时,它们的行为才会不同。另一方面,如果你非常确定它是一个字符串化的整数,那么只做+str或str*1就容易多了。