| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 полюбэ |
| Автор: batigoal 18.6.2005, 11:35 | ||
Именно так. Сравниваются ссылки, а не сами объекты. |
| Автор: Sardar 18.6.2005, 17:42 |
| Итерпретатор не лезет в содержимое обьекта и не проверяет никаких полей, обьекты ведь разные бывают Скажем так, у интерпретатора есть хешь-таблица/дерево имён переменных(глобальных/локальных), под каждым именем лежит ссылка на обьект(адрес в памяти). Если ссылки разные, то == вернёт false. В Java в базовом интерфейсе java.lang.Object есть метод equals, который любой класс может переопределить если хочет сравнивать себе подобных по контенту. В JS такого метода у Object нет, поэтому пишем свою equals, а при вызове проверяем есть ли такая функция. |
| Автор: Aliance 18.6.2005, 18:14 |
| И, кстати, если есть два абсолютно идентичные, скажем, массивы, то ссылки на них не будут идентичны |