Просмотр полной версии : сравнение "undefined" и 0
trace(undefined >= 0); // true
trace(undefined <= 0); // true
trace(undefined > 0); // undefined
trace(undefined > 0); // undefined
trace(undefined == 0); // falseКто-нить может объяснить почему?
Сверху AS, снизу байткод
trace(undefined > 0); // undefined
//
push UNDEF, 0.00
greaterThan
и
trace(undefined > 0); // undefined
//
push UNDEF, 0.00
greaterThan
В версиях младше 7-го плеера здесь бы возвращался false, но начиная с 7-ки логика изменилось. undefined - это неопределенное значение, поэтому сказать, больше или меньше нельзя, поэтому результат сравнения не определен, поэтому результат undefined.
trace(undefined >= 0); // true
//
push UNDEF, 0.00
lessThan
not
и
trace(undefined <= 0); // true
//
push UNDEF, 0.00
greaterThan
notЕсли сравнить с байткодом выше, то видно, что разница в заключается в отрицании (not) результата полученного от сравнения больше/меньше. То есть not применяется к undefined, который конвертируется предварительно в булево значение, что дает false. А отрицание false это true.
trace(undefined == 0); // false
//
push UNDEF, 0.00
equals
Ну тут и так понятно. Неопределенное значение не равно нулю (определенному значению) :)
Там trace(undefined < 0); // undefined :) Но не бог весть какая разница...
В общем-то, конечно не все ясно :) просто буду теперь иметь в виду.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.