В JavaScript почему {} == {} ложно?
Сравнение равенств в JavaScript работает одним из двух способов.
При работе с примитивными типами - числом, строкой, булевой функцией и тому подобными - JavaScript проверяет равенство значений. Имеют ли два оператора, которые мы сравниваем, одинаковое значение? Например:
console.log(3 == 3) // trueconsole.log(3 == 4) // falseпусть a = 3;пусть b = 3;пусть c = 4;console.log(a == b) // trueconsole.log(a == c) // falseКогда мы работаем с объектами, сравнение равенства выглядит несколько иначе. Вместо того чтобы сравнивать два объекта по значению, мы сравниваем их по ссылке. Ссылаются ли два оператора на один и тот же объект? Например:
пусть a = {};пусть b = {};пусть c = b;console.log(a == b) // falseconsole.log(c == b) // trueДаже если значения a и b относятся к “look equal” - они оба являются пустыми объектами - эти объекты живут в разных местах памяти. Поскольку a и b не ссылаются на одни и те же объекты, они не равны в соответствии с правилами сравнения равенства объектов. Обратите внимание, что c и b равны в соответствии с этими правилами, поскольку c относится к b , который ссылается на один объект в памяти.
Два объектных литерала, созданные "на лету", всегда будут занимать разные адреса в памяти, поэтому они никогда не будут равны друг другу. Поэтому, {} == {} это false .
Comments