Просмотр полной версии : Операторы
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", правильно?
похоже да, для убедительности введи строку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".
хе, проверил дает 'true'.
Ващето я под МХ2004 с его ас2, но переключился ас1 - однако снова 'true' :D
Проверели еще авторитетные отцы :) . Сказали: 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?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.