Javascript 如何处理parseFloat(";)和isNaN(";)之间的不一致性

Javascript 如何处理parseFloat(";)和isNaN(";)之间的不一致性,javascript,json,knockout.js,hash,Javascript,Json,Knockout.js,Hash,我需要检查valueisNaN(“”===true但它返回false,但parseFloat(“”返回NaN) 之所以需要它,是因为我正在使用JSON.stringify()执行哈希检查,并且knockout observable而不是numeric value返回字符串数值 例如,它返回的不是1.23,而是“1.23” 问题:如何解析字符串数值而不获取结果NaN 如何解析字符串数值而不获取NaN作为结果 如果这些值不能被解析为数值,那么你就不能。但是“1.23”可以被解析为数值: var nu

我需要检查value
isNaN(“”===true
但它返回false,但
parseFloat(“”
返回
NaN

之所以需要它,是因为我正在使用
JSON.stringify()
执行哈希检查,并且knockout observable而不是numeric value返回字符串数值

例如,它返回的不是
1.23
,而是
“1.23”

问题:如何解析字符串数值而不获取结果
NaN

如何解析字符串数值而不获取NaN作为结果

如果这些值不能被解析为数值,那么你就不能。但是
“1.23”
可以被解析为数值:

var num = parseFloat("1.23");
console.log(num); // 1.23
如果需要检查结果是否为
NaN
,请检查结果:

…除了那部分的
==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
来调用的从字符串到数字的默认强制没有。我不清楚您到底想要什么。是否要筛选出
”?如果不想退出,请在未获得预期输入时选择回退,例如
x=+str | | 0
(简单的例子,因为
0 | | 0
给出了
0
,尽管它来自RHS)很好的观点。我想用
isNaN
检查值,但这样当我实际检查
parseFloat
结果时,问题就解决了。@skmasq:为了完整性:另一种方法是继续使用
isNaN(string)
然后使用
Number(string)
来解析它。这是在两种情况下使用相同规则的另一种方式。
console.log(parseFloat("1.23aaa"));        // 1.23
console.log(isNaN("1.23aaa"));             // true!!
console.log(isNaN(parseFloat("1.23aaa"))); // false