Я проверял свою консоль. Когда я проверил пустой объект прямо как {} == {}
, он показывает false.Зачем сравнивать пустой объект, напрямую показывающий false?
Почему он показывает false
? не должен ли он показывать true
как оба равны?
Я проверял свою консоль. Когда я проверил пустой объект прямо как {} == {}
, он показывает false.Зачем сравнивать пустой объект, напрямую показывающий false?
Почему он показывает false
? не должен ли он показывать true
как оба равны?
Когда я проверил пустой объект, как {} == {}, он показывает false.
У вас есть два разных объекта здесь, а не один. Здесь ==
проверяет, являются ли данные два объекта одинаковыми или нет.
Сценарий 1:
var foo = {}; //new object
var bar = foo; //shared same object
foo == bar;// true
Сценарий 2:
var foo = {}; //new object
var bar = {}; //new object
foo == bar;// false
Если вы все еще хотите, чтобы сравнить два разных объекта, попробуйте это:
var foo = {}; //new object
var bar = {}; //new object
JSON.stringify(foo) == JSON.stringify(bar);// true
Здесь JSON.stringify({})
дает значение строки "{}"
Оба являются NOTequal
. Хотя они пусты, оба относятся к различным объектам.
Примитивы, такие как строки и числа, сравниваются по их значению, тогда как объекты, такие как массивы, даты и простые объекты, сравниваются по их ссылке. Это сравнение по ссылке в основном проверяет, указывают ли указанные объекты в одно и то же место в памяти, а это не так, поэтому сравнение является ложным.
использовать более рекомендуемый === компаратор – svarog
Два отдельных объекта никогда не равны. Но вы можете сделать это: var a = {}; var b = a; if (b == a) // будет истинным' – devnull69