Показать сообщение отдельно
Старый 28.05.2010, 17:56
camelot вне форума Посмотреть профиль Отправить личное сообщение для camelot Найти все сообщения от camelot
  № 15  
Ответить с цитированием
camelot

Регистрация: Jul 2006
Сообщений: 26
Цитата:
Сообщение от AzagThoth Посмотреть сообщение
Чем не устраивает isNaN
Зачем городить сравнения вообще.
вот вы везде везде где у вас переменная Number прежде чем её использовать вы проверяете её isNaN и ещё наверное проверяет её тип typeof и чтобы быть 100% увереным ещё и instanceof Number и чтобы добить до конца parseInt, да?

бывает случаи когда переменная не инициализирована или другого типа и получается так, что это приводит к очень печальным последствиям.
например при восходящем или нисходящем приведении типа когда ссылка на мувиклип или объект превращается в undefiened или null. а если вы ещё и работаете с динамическими данными и трудно поймать такое условие - вам будет стоить громадных усилий и времени поймать в чем проблема.

например:

Код AS1/AS2:
class A
{
   public var testVar:Number = 10;
}
 
var mc:MovieClip = attachMovie("AfromLibrary", "instanceOfA", 0); // или createEmptyMovieClip("instanceOfA", 0) - кому как нравится
mc.__proto__ = A.prototype;
var instA:A = A(mc);
var resultValue:Number = instA.testVar + 10;
if (resultValue:Number >= 0 )
{
  trace("all ok");
}
else
{
  unloadMovie(_level0);
}
а всего то ошибка class A extends MovieClip.
в результате cтроки:
Код AS1/AS2:
var instA:A = A(mc); //instA = null
var resultValue:Number = instA.testVar + 10; // resultValue = NaN
if (resultValue >= 0 ) // читайте выше, что даёт NaN >= 0


з.ю. ради бога, не придирайтесь к примеру. выдумал по быстрому