PDA

Просмотр полной версии : Операторы


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?