![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
mtasc выдает
trace( "ABC" == 0 ); // false trace( "ABC" < 0 ); // undefined trace( "ABC" > 0 ); // undefined trace( "ABC" >= 0 ); // true trace( "ABC" <= 0 ); // true IDE-шный компилятор для >= и <= дает тоже undefined (т.е. невыполнимость опреации, а вовсе не false), можно предположить, что выполнение прерывается на стадии lt/gt без выполнения not Последний раз редактировалось silin; 26.05.2010 в 17:09. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Если посмотреть на байткод который выдал компилятор ide
то видно, что на стадии компиляции произошло сравнение с данными и был записан уже результат, то есть была оптимизация кода. Вот если бы вы написали то и результат был бы другой. |
|
|||||
|
Ага, понятно. Ну вот тут то и косяк, мой вариант разложения по логике должен давать тот же результат, что и твой. Конечно, не стоит сравнивать тёплое с мягким, но один фиг - расходится.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Jul 2006
Сообщений: 26
|
вот вы везде везде где у вас переменная Number прежде чем её использовать вы проверяете её isNaN и ещё наверное проверяет её тип typeof и чтобы быть 100% увереным ещё и instanceof Number и чтобы добить до конца parseInt, да?
бывает случаи когда переменная не инициализирована или другого типа и получается так, что это приводит к очень печальным последствиям. например при восходящем или нисходящем приведении типа когда ссылка на мувиклип или объект превращается в undefiened или null. а если вы ещё и работаете с динамическими данными и трудно поймать такое условие - вам будет стоить громадных усилий и времени поймать в чем проблема. например: 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); } в результате cтроки: var instA:A = A(mc); //instA = null var resultValue:Number = instA.testVar + 10; // resultValue = NaN if (resultValue >= 0 ) // читайте выше, что даёт NaN >= 0 з.ю. ради бога, не придирайтесь к примеру. выдумал по быстрому |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|