Actionscript 3 比较Actionscript 3中的parseInt和NaN
AS3文档说明,如果将字符串传递给Actionscript 3 比较Actionscript 3中的parseInt和NaN,actionscript-3,nan,parseint,Actionscript 3,Nan,Parseint,AS3文档说明,如果将字符串传递给parseInt,该字符串不是一个数字,它将返回NaN。但是,当我尝试与NaN进行比较时,编译器会给出以下错误: Warning: 1098: Illogical comparison with NaN. This statement always evaluates to false. 这句话实际上是对的。与NaN比较将始终返回false。如何与NaN进行比较以检测解析的内容是否为NaN if( parseInt("test") == NaN ) {
parseInt
,该字符串不是一个数字,它将返回NaN
。但是,当我尝试与NaN
进行比较时,编译器会给出以下错误:
Warning: 1098: Illogical comparison with NaN. This statement always evaluates to false.
这句话实际上是对的。与NaN比较将始终返回false
。如何与NaN进行比较以检测解析的内容是否为NaN
if( parseInt("test") == NaN )
{
// do something (never gets here)
}
使用全局函数
if(isNaN(parseInt("test")))
{
// do something
}
与
isNaN()
函数比较。每个人都是正确的,请使用isNaN()
函数:
function isNumber(num:Number):Boolean{
return num == num;
}
()
我从来没有真正喜欢过这种方法。我更喜欢做阳性检查
有趣的是,如果一个数字是NaN,那么它就不等于它自己:
var parsed_int:Number = parseInt("test");
if(parsed_int != parsed_int)
trace("NaN");
因此,如果测试该数字是否等于其本身,则应给出阳性结果:
var parsed_int:Number = parseInt("123");
if(parsed_int == parsed_int)
trace("Number");
阅读代码时,您的意图不是很清楚,因此如果您使用它,请务必对其进行注释
或者您可以添加一个顶级函数:
function isNumber(num:Number):Boolean{
return num == num;
}
还有一个关于优化螺母的注释。内联版本是最快的
仅供参考:拍拍额头。当然我现在记得我两年前也有同样的问题。为什么parseInt文档不引用isNaN函数呢?
isNaN
函数是自文档。如果没有注释来解释为什么要将一个值与它自身进行比较,它看起来就像是一段多余的代码。是的,但我总是觉得了解一些东西是如何工作的很有趣。另外,如果您希望仅在parseInt返回一个数字时执行某些操作,那么您将得到类似if(!isNaN(parseInt(“test”))的代码。不是数字吗?在我看来,这是一个丑陋的数字。NaN
不是一个单一的数字,而是一个范围。此外,ECMA规范在比较中使用NAN:结果总是错误的。