2010-10-18 10 views
4

В документации AS3 указано, что если вы передадите строку в parseInt, которая не является номером, она вернет NaN. Однако, когда я пытаюсь сравнить NaN компилятор дает мне следующую ошибку:Сравнение parseInt с NaN в ActionScript 3

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) 
} 

ответ

16

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

+3

Slap лоб. Конечно. Теперь я помню, что у меня была такая же проблема в AS2 несколько лет назад. Почему документация parseInt не ссылается на функцию isNaN? – Luke

8

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

if(isNaN(parseInt("test"))) 
{ 
    // do something 
} 
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()

+0

Функция 'isNaN' является самодокументированной. Без комментария, объясняющего, почему вы сравниваете значение с самим собой, он просто выглядит как лишний кусок кода. –

+0

Да, но мне всегда интересно узнать, как что-то работает. Плюс, если вы хотите что-то делать, только если parseInt возвращает Number, вы получите код, например if (! IsNaN (parseInt («test»))). Разве это не номер? На мой взгляд, это просто уродливо. – Joony

+1

'NaN' - это не один номер, а целый ряд [номеров определенного формата] (https://en.wikipedia.org/wiki/IEEE_754-1985#NaN). Более того, спецификация ECMA [прямо запрещает вам] (http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3) использовать NaN в сравнении: результат всегда является ложным. –