为什么比较空对象直接显示false?

时间:2015-05-06 08:48:19

标签: javascript

我正在检查我的控制台。当我像{} == {}一样直接检查空对象时,它显示为false。

为什么显示false?它不应该显示true因为两者都相等吗?

3 个答案:

答案 0 :(得分: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({})提供字符串值"{}"

答案 1 :(得分:2)

两者都是 NOT equal。虽然它们都是空的,但它们都指的是不同的物体。

答案 2 :(得分:2)

字符串和数字等原语按其值进行比较,而数组,日期和普通对象等对象则按其引用进行比较。通过引用进行的比较基本上会检查给定的对象是否指向内存中的相同位置,而不是它们,因此比较是错误的。