我已经在各种情况下使用parseInt()andparseFloat()一段时间了,我想我知道这两者的所有来龙去脉。但是最近我有一个奇怪的想法,到目前为止我还无法确定地证明它。
考虑以下函数:
function testProof(strInteger) {
assert(strInteger === '' + parseInt(strInteger, 10));
assert(parseInt(strInteger, 10) === parseFloat(strInteger));
}
// Sample calls...
testProof("5");
testProof("109");
testProof("-55");
首先,我们assert将输入转换为整数,然后再转换回字符串会再次生成原始字符串。这可以防止parseInt("100bucks")返回的情况100,并且它还确保没有被转换截断的小数部分——我们要确保输入实际上是一个整数、整数字符串。
如果成功,我们assert将parseInt(..., 10)返回与 相同的值parseFloat(...)。
assert第一个失败的原因有很多:
- 输入不是整数 (
"1.5") - 输入有前导零 (
"0050") - 输入有尾随垃圾 (
"100bucks") - 输入是指数符号 (
"1e3"),或者它太大而变成指数 - 输入不可解析,导致
NaN - 也许其他人?
但问题是:只要第一次assert通过,第二次assert会失败吗?换句话说,如果我们提前知道输入是字符串中的整数,则可以parseFloat(...)作为parseInt(..., 10)? (并不是说这是一个很好的替代品...... :-P)