Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   сравнение "undefined" и 0 (http://www.flasher.ru/forum/showthread.php?t=119782)

ambuddy 30.12.2008 15:49

сравнение "undefined" и 0
 
Код AS1/AS2:

trace(undefined >= 0)// true
trace(undefined <= 0)// true
trace(undefined > 0)// undefined
trace(undefined > 0)// undefined
trace(undefined == 0)// false

Кто-нить может объяснить почему?

iNils 30.12.2008 17:01

Сверху 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

Ну тут и так понятно. Неопределенное значение не равно нулю (определенному значению) :)

ambuddy 30.12.2008 19:52

Там trace(undefined < 0); // undefined :) Но не бог весть какая разница...
В общем-то, конечно не все ясно :) просто буду теперь иметь в виду.

iNils 30.12.2008 19:59

Там это где?


Часовой пояс GMT +4, время: 19:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.