如何在parseFloat(“”)和isNaN(“”)之间出现不一致

时间:2014-06-05 22:11:08

标签: javascript json knockout.js hash

我需要检查值isNaN("") === true,但它返回false,但parseFloat("")返回NaN

为什么我需要这个是因为我正在使用JSON.stringify()进行哈希检查,而knockout observable而不是numeric值会返回一个字符串数值。

E.g。而不是1.23它返回"1.23"

问题:如何在不获取NaN的情况下解析字符串数值?

1 个答案:

答案 0 :(得分:4)

  

如何在不获取NaN作为结果的情况下解析字符串数值?

嗯......你不能,如果这些值不能被解析为数值。但"1.23" 可以解析为数值:

var num = parseFloat("1.23");
console.log(num); // 1.23

如果您需要检查结果是否为NaN,请检查结果

isNaN(parseFloat(yourInput)) === true

...除了=== true部分中有点,所以:

isNaN(parseFloat(yourInput))

parseFloat以及将字符串传递到isNaN后使用的默认强制编号遵循不同的规则。特别是,parseFloat将停止解析第一个非数字,但isNaN [实际上]使用Number函数,如果存在非数字字符,则会失败。因此,如果您需要依赖parseFloat来自非NaN的结果,则必须致电parseFloat并将其结果传递给isNaN

以下是一个示例:"1.23aaa"让我们看看我们在那里看到的内容:

console.log(parseFloat("1.23aaa"));        // 1.23
console.log(isNaN("1.23aaa"));             // true!!
console.log(isNaN(parseFloat("1.23aaa"))); // false

parseFloat从第一个a开始尝试停止,但是通过将字符串传递到isNaN 来调用从字符串到数字的默认强制不会