Сверху 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
Ну тут и так понятно. Неопределенное значение не равно нулю (определенному значению)
