4

AS3のドキュメントには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)
}
4

3 に答える 3

16

機能と比較してくださいisNaN()

于 2010-10-18T07:24:02.360 に答える
9

isNaN()グローバル関数を使用する

if(isNaN(parseInt("test")))
{
   // do something 
}
于 2010-10-18T07:23:54.873 に答える
2

誰もが正しいです、isNaN()関数を使用してください:

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/package.html#isNaN()

私はこの方法が本当に好きではありませんでした。私は陽性をテストすることを好みます。

ただし、興味深いことに、数値が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;
}

そして、そこにある最適化の要点についてのメモ。インラインバージョンが最速です。

参考までに:http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/package.html#parseInt()

于 2010-10-18T08:10:00.127 に答える