Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как сравниваются объекты в JS?


Автор: Иль 13.6.2005, 14:32
Как сравниваются объекты JS в JS. Имеем две переменные хранящие ссылки на объекты. Интерпритатор ограничивается сравнением ссылок на объекты и выдает true если они на один и тот же объект или он идет вглубь сверяя каждую пару свойств?

Тот же вопрос для Node.

Если он идет в глубь, то я ограничусь сравнением какого-либо уникального свойства, а если нет, то без нагрузки на систему можно if(a==b){...}

Автор: Sardar 18.6.2005, 03:53
Интерпретатор сравнивает ссылки на обьекты, выдаёт true тогда и только тогда, когда обе указывают на один и тот же обьект. Не важно что обьекты могут быть на твой взгляд "идеентичны".

Короче как во всех интерпретируемых обьектных языках.

Автор: Иль 18.6.2005, 09:43
Я вот что прошу уточнить, если ссылки указывают на разные объекты, то интерпретатор при сравнении выдаст false полюбэ smile или будет заморачиваться, пока не вывернет объекты на изнанку и не проверит каждую пару свойств. Те можно не боятся за ресурсы и тупо сравнить a==b или всетаки лучше заранее знать о каком-то уникальном свойстве и использовать a.unica==b.unica

Автор: batigoal 18.6.2005, 11:35
Цитата
если ссылки указывают на разные объекты, то интерпретатор при сравнении выдаст false полюбэ

Именно так. Сравниваются ссылки, а не сами объекты.

Автор: Sardar 18.6.2005, 17:42
Итерпретатор не лезет в содержимое обьекта и не проверяет никаких полей, обьекты ведь разные бывают smile

Скажем так, у интерпретатора есть хешь-таблица/дерево имён переменных(глобальных/локальных), под каждым именем лежит ссылка на обьект(адрес в памяти). Если ссылки разные, то == вернёт false. В Java в базовом интерфейсе java.lang.Object есть метод equals, который любой класс может переопределить если хочет сравнивать себе подобных по контенту. В JS такого метода у Object нет, поэтому пишем свою equals, а при вызове проверяем есть ли такая функция.

Автор: Aliance 18.6.2005, 18:14
И, кстати, если есть два абсолютно идентичные, скажем, массивы, то ссылки на них не будут идентичны smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)