我的对象(JSON.stringify
)看起来像是:
"{"test":[{"header":{"test":1}}]}"
和另一个看起来像的对象:
"{"test":1}"
现在,如果我试试这个:
firstObj.test[0].header == secondObj
javascript说false
。为什么呢?
答案 0 :(得分:2)
在Javascript中,两个对象(ei对象,数组,函数 - 所有非基本类型)只有在它们是相同对象时才相等,否则即使它们看起来相同,也具有相同的属性,值 - 它们是不同的对象,没有办法比较它们会给你true
。
答案 1 :(得分:0)
Javascript通过引用比较非基元,两个引用不能相同。
var a = {};
var b = a;
然后
a == b //true
数组,函数
的类似情况答案 2 :(得分:0)
正如其他人在此指出的那样,JS中的对象比较是同一实例比较,而不是值比较。对于你有限的例子,比较JSON.stringify()的结果似乎是有效的,但如果你不能保证属性的顺序(JS没有),那么它也不会起作用。有关详细信息,请参阅Object comparison in JavaScript。该链接有一个更复杂的答案,但如果你知道你正在比较的对象,那么比较的最佳测试是特定的一个恕我直言,例如测试你关心的属性。对象可以是JS中的任何东西,因此,将对象视为"相等"在特定背景之外没有意义。