Форум 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)
-   -   как происходит нестрогое сравнение? (http://www.flasher.ru/forum/showthread.php?t=66928)

AlDev 20.07.2005 06:46

как происходит нестрогое сравнение?
 
Как всё-таки происходит нестрогое сравнение?
с помощью valueOf или toString?

если что-то из вышеперечисленного, то как объяснить вот это?
Код:

trace(this.start_date);
trace(this.end_date);
trace(this.start_date.valueOf()==this.end_date.valueOf());
trace(this.start_date.toString()==this.end_date.toString());
trace(this.start_date==this.end_date);

выводится соответственно:
Код:

Wed Feb 1 00:00:00 GMT+0800 2006
Wed Feb 1 00:00:00 GMT+0800 2006
true
true
false

this.start_date - Date
this.end_date - Date
т.е. и при valueOf, и при toString значения одинаковые, однако когда произвожу сравнение start_date и end_date напрямую, выводится false.
Причем методы valueOf и toString у класса Date есть.

iNils 20.07.2005 11:45

Вот почитай об сравнении

PS. Взял твой пример и в последнем случаи у меня было true. И в mx и mx 20004

AlDev 20.07.2005 12:19

я в FAME сижу...
Код:

var start_dat:Date = new Date(2005,1,1,0,0);
var end_dat:Date = new Date(2005,1,1,0,0);
trace(start_dat==end_dat);

выдаётся:
Код:

false
собственно valueOf у start_dat и end_dat одинаковы...
UTC у этих дат одинаковы. Как они вообще сравниваются?? и почему собственно false выдаётся?

iNils 20.07.2005 12:29

Ошибся я. False там, забыл значения date определеить :)

А вообще забавно:
Код:

if (this.start_date > this.end_date) {
        trace (1);
} else if (this.start_date < this.end_date) {
        trace (2);
} else if (this.start_date == this.end_date){
        trace (0);
} else {
        trace ("???");
}


AlDev 20.07.2005 12:42

эт что получается, они ни больше, ни меньше, ни равны??
эт вообще как?

AlDev 20.07.2005 12:45

в продолжении:
Код:

trace (start_dat>=end_dat);
trace (start_dat<=end_dat);

выдаётся true

iNils 20.07.2005 12:55

Код:

Date.prototype.valueOf = function () {
        trace ("---");
};
this.end_date = new Date ();
this.start_date = new Date ();
trace (this.start_date == this.end_date);
if (this.start_date > this.end_date) {
        trace (1);
} else if (this.start_date < this.end_date) {
        trace (2);
} else if (this.start_date == this.end_date) {
        trace (0);
} else {
        trace ("???");
}


AlDev 20.07.2005 13:03

при >= и <= тож вызывается valueOf.
тогда собственно говоря, возвращаемся к вопросу, как сравниваются даты.

iNils 20.07.2005 13:22

Я думаю так. Тут происходит не сравнение дат, а сравнение объектов.
Если псоле определения дат вставить строчку this.end_date=this.start_date, то при сравнение, будет true.

AlDev 20.07.2005 13:28

да, но сравнение объектов нестрогое разве не через valueOf идёт?


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

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