В 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 .

581   0  

Comments

    Ничего не найдено.