Показать сообщение отдельно
Старый 30.12.2008, 17:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Сверху AS, снизу байткод
Код AS1/AS2:
trace(undefined > 0);   // undefined
//
push UNDEF, 0.00
greaterThan
и
Код AS1/AS2:
trace(undefined > 0);   // undefined
//
push UNDEF, 0.00
greaterThan
В версиях младше 7-го плеера здесь бы возвращался false, но начиная с 7-ки логика изменилось. undefined - это неопределенное значение, поэтому сказать, больше или меньше нельзя, поэтому результат сравнения не определен, поэтому результат undefined.

Код AS1/AS2:
trace(undefined >= 0);  // true
//
push UNDEF, 0.00
lessThan
not
и
Код AS1/AS2:
trace(undefined <= 0);  // true
//
push UNDEF, 0.00
greaterThan
not
Если сравнить с байткодом выше, то видно, что разница в заключается в отрицании (not) результата полученного от сравнения больше/меньше. То есть not применяется к undefined, который конвертируется предварительно в булево значение, что дает false. А отрицание false это true.

Код AS1/AS2:
trace(undefined == 0);  // false
//
push UNDEF, 0.00
equals
Ну тут и так понятно. Неопределенное значение не равно нулю (определенному значению)
__________________
(и)Нильс.ru | Плагины для FlashDevelop