Показать сообщение отдельно
  #37 (permalink)  
Старый 26.12.2011, 01:25
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Livaanderiamarum
я бы сравнил названия всех ключей. если а этом этапе разницы не обнаружено то, сравнил бы значения ключей.

тут 2 этапа:
1) вначале отыскиваются и сравниваются все примитивные значения, если разница не обнаружена, то.
2) потом сравниваются все остальные ссылки. при том используется не только примитивный метод getValue() а еще и анализ на цикличность ссылок. при том если ссылка ведет на одну и ту же область в памяти то, учитывал бы это как равность. как то так.
Все-таки как ваш алгоритм от работает на примере?
var a = {};//адрес - 0x0008
var b = {};//адрес - 0x00A8
a.a = a;
b.a = b;
alert(a == b)

1)Сравниваем объекты a(0x0008) и b(0x00A8)
Названия ключей одинаковые, примитивных значений нету
2) Сравниваем между собой их единственное свойство
a.a(0x00A8) и b.a(0x0008)
Это объекты находящиеся по разным адресам(а значит предположительно разные)
НАзванияю ключей в этих объектах одинаковые. примитивных значений нету
3)Сравниваем между собой единственное свойство у объектов a.a(0x00A8) и b.a(0x0008) - a.a.a(0x0008) и b.a.a(0x00A8)
Это ссылки на объекты находящиеся по разным адресам(а значит надо продолжить сравнивать)
Ну у каждого из них обнаружено зацикливание(адрес совпадает с первоначальным для объектов)
Поэтому вглубь мы не идем
И что дальше?
равны текущие свойства или нет? Если да, то почему?
Ответить с цитированием