Сравнение parseInt с NaN в ActionScript 3 - PullRequest
4 голосов
/ 18 октября 2010

В документации 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)
}

Ответы [ 3 ]

16 голосов
/ 18 октября 2010

Сравните с функцией isNaN().

8 голосов
/ 18 октября 2010

Использование isNaN () глобальная функция

if(isNaN(parseInt("test")))
{
   // do something 
}
2 голосов
/ 18 октября 2010

Все правы, используйте функцию 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()

...