Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Операторы (http://www.flasher.ru/forum/showthread.php?t=54622)

Whatsername 11.02.2004 13:00

Операторы
 
Код:

x = new Object();
y = new Object();
trace(x == y); // false
trace(x <= y); // true
trace(x >= y); // true

Во как странно работают операторы!
Я думаю, что оператор равенства сравнивает ссылки на объект, а операторы сравнения строки "object Object", правильно?

Jlekc 11.02.2004 14:09

похоже да, для убедительности введи строку
Код:

trace (typeof x >= y); // true

Whatsername 11.02.2004 16:16

Цитата:

trace (typeof x >= y); // true
trace (typeof x >= y); // not true, but false.
Вот trace (typeof x >= typeof y); // true, но это и понятно - сравниваются строки "Object".

Jlekc 11.02.2004 17:15

хе, проверил дает 'true'.
Ващето я под МХ2004 с его ас2, но переключился ас1 - однако снова 'true' :D

Jlekc 11.02.2004 17:24

Проверели еще авторитетные отцы :) . Сказали: true, not false

Whatsername 11.02.2004 18:30

Jlekc, меня глюкануло, точно true для ">= " и false для "==", только я не понимаю зачем typeof применять к одному операнду. Как это дает ответ на вопрос?

Nox Noctis 11.02.2004 19:39

у объектов есть методы valueOf и toString

они определены по умолчанию, и используются автоматически при необходимости приведения типов

по умолчанию valueOf возвращает ссылку
а toString - "[object Object]"

эти методы можно переписать самому, если нужны какие-то более осмысленные вещи :)

например, в арифметических операциях сначала идет попытка воспользоваться valueOf, и если полученное значение не является числом - срабатывает toString

Код:

a = {};
b = {};
a.valueOf = function() {
        return 2;
};
b.valueOf = function() {
        return 1;
};
trace(a > b);
trace(a < b);


Whatsername 12.02.2004 13:00

Спасибо,
toString и valueOf в таких случаях вызываются автоматически.
Но вопрос такой: "==", в случаях сравнения сложных данных, сравнивает ссылки. А ">=" и "<=" сравнивает значение, right?
Это единственное объяснение первому коду, right?


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

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