в чем разница между двумя объектами в JavaScript

Может ли кто-нибудь помочь мне понять разницу в obj1 и obj2, созданных двумя способами в JavaScript? В консоли они выглядят одинаково.

var obj1 = { 'name': 'blue', 'shade': 'dark'};
var obj2 = JSON.parse('{"name":"blue","shade":"dark"}');

так как

 (obj1 === obj2)  is false as 
 (obj1 == obj2) is false

в то время как в консоли javascript отображается как

Object {name: "blue", shade: "dark"}
Object {name: "blue", shade: "dark"}

person HYA    schedule 05.08.2014    source источник
comment
возможный дубликат Как определить равенство для двух объектов JavaScript?   -  person Getz    schedule 05.08.2014
comment
Переменная, которой присваивается объект, на самом деле не содержит значение объекта, а скорее ссылку на него. 2 отдельных объекта, 2 разные ссылки.   -  person Elias Van Ootegem    schedule 05.08.2014


Ответы (3)


Хотя содержимое объектов одинаково, у вас есть ссылки на два отдельных объекта, поэтому == и === оба терпят неудачу (они проверяют ссылку, а не содержимое).

person ABucin    schedule 05.08.2014

Как сказал ABucin, javascript проверяет ссылки, если вы все еще хотите проверить, равны ли два jsons, вы можете попробовать использовать

JSON.stringify(obj1) === JSON.stringify(obj2)

или проверить для каждого ключа (немного сложнее, но более эффективно в случае, если ключи находятся в разном порядке).

Попробуйте прочитать это:

Сравнить 2 объекта json

person Pablo Matias Gomez    schedule 05.08.2014
comment
Не используйте первый метод, ничто не гарантирует порядок свойств вашего объекта. - person Getz; 05.08.2014

вы создаете объект с помощью obj1, а в obj2 вы анализируете объект JSON в объект. Поскольку оба объекта разные (разные ссылки), они рассматриваются как разные

Вы можете узнать больше об этом здесь

person V31    schedule 05.08.2014