2015-05-06 2 views
-5

Я проверял свою консоль. Когда я проверил пустой объект прямо как {} == {}, он показывает false.Зачем сравнивать пустой объект, напрямую показывающий false?

Почему он показывает false? не должен ли он показывать true как оба равны?

+0

использовать более рекомендуемый === компаратор – svarog

+0

Два отдельных объекта никогда не равны. Но вы можете сделать это: var a = {}; var b = a; if (b == a) // будет истинным' – devnull69

ответ

5

Когда я проверил пустой объект, как {} == {}, он показывает 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({}) дает значение строки "{}"

2

Оба являются NOTequal. Хотя они пусты, оба относятся к различным объектам.

2

Примитивы, такие как строки и числа, сравниваются по их значению, тогда как объекты, такие как массивы, даты и простые объекты, сравниваются по их ссылке. Это сравнение по ссылке в основном проверяет, указывают ли указанные объекты в одно и то же место в памяти, а это не так, поэтому сравнение является ложным.

Смежные вопросы