Javascript 如何处理parseFloat(";)和isNaN(";)之间的不一致性
我需要检查valueJavascript 如何处理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
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