Javascript 两个对象是相等的,但是js确实说false。

Javascript 两个对象是相等的,但是js确实说false。,javascript,object,Javascript,Object,我有一个对象(JSON.stringify)看起来像: "{"test":[{"header":{"test":1}}]}" "{"test":1}" 另一个物体看起来像: "{"test":[{"header":{"test":1}}]}" "{"test":1}" 现在,如果我尝试以下方法: firstObj.test[0].header == secondObj javascript显示false。为什么?在Javascript中,两个对象(即对象、数组、函数-所有非基本类型)只

我有一个对象(
JSON.stringify
)看起来像:

"{"test":[{"header":{"test":1}}]}"
"{"test":1}"
另一个物体看起来像:

"{"test":[{"header":{"test":1}}]}"
"{"test":1}"
现在,如果我尝试以下方法:

firstObj.test[0].header == secondObj

javascript显示
false
。为什么?

在Javascript中,两个对象(即对象、数组、函数-所有非基本类型)只有在它们是相同的对象时才相等,否则即使它们看起来相同,具有相同的属性和值-它们是不同的对象,比较它们无法得到
true

Javascript通过引用比较非原语,两个引用不能相同

var a = {};
var b = a;
然后


数组、函数的情况类似,正如这里其他人指出的,JS中的对象比较是同一实例比较,而不是值比较。对于您有限的示例,比较JSON.stringify()的结果似乎是可行的,但是如果您不能保证属性的顺序(JS没有),那么这也不可行。有关详细信息,请参阅。这个链接有一个更复杂的答案,但是如果你知道你要比较的对象,那么最好的比较测试就是一个特定的IMHO测试,例如测试你关心的属性。对象可以是JS中的任何东西,因此,在特定上下文之外,将对象视为“相等”是没有意义的。

完全同意@dfsq,只添加了您可以比较内部基元类型(
string
int
)以模拟比较,并在需要时获得
true
,询问您是否需要更多信息来实现它
JSON.stringify({a:1,b:1})!=JSON.stringify({b:1,a:1})
使用
JSON.stringify
比较对象是个坏主意。我同意,这就是为什么我链接到一个解释这些限制的答案。我将编辑我的答案来提及这一点,但如果没有更多的上下文,很难给出一个一般性的答案。