两个对象相等,但js确实说错。

时间:2015-03-11 10:36:39

标签: javascript object

我的对象(JSON.stringify)看起来像是:

"{"test":[{"header":{"test":1}}]}"

和另一个看起来像的对象:

"{"test":1}"

现在,如果我试试这个:

firstObj.test[0].header == secondObj

javascript说false。为什么呢?

3 个答案:

答案 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中的任何东西,因此,将对象视为"相等"在特定背景之外没有意义。