我知道我们不能直接比较一个对象是否等于另一个。
{} == {}
将返回false。
var b = {};
b === Object(b); //true
b === Object({}); //false
然而,上面的代码让我困惑,为什么b === Object({})
返回false?
有人可以解释一下吗?
答案 0 :(得分:3)
它实际上在documentation
Object构造函数为给定值创建一个对象包装器。如果值为null或未定义,则它将创建并返回一个空对象,否则,它将返回与给定值对应的Type对象。 如果该值已经是某个对象,则会返回该值。
如您所知,两个对象永远不会相同
{} == {} // false
但是当你将一个对象传递给Object构造函数时,它会返回完全相同的对象,而不是一个新对象。
var b = {};
b === Object(b); //true
在这里,您将同一个对象传递给您将再次比较的Object构造函数,Object构造函数将返回该对象,并将对象与其自身进行比较将返回true
。
换句话说,上述内容与b === b
相同
继续这个
b === Object({}); //false
在这里你传入一个空的新对象,该对象将被返回,但它永远不会是与b
相同的对象,并且两个不同的对象永远不会相等,因此{{1} }
答案 1 :(得分:2)
每当您创建对象{}
的新实例时,每当您说Object({})
ot {}
时。
所以
b={}; // instance one
Object({}); //instance two
b===Object({})
与b==={}
相同。两者都会返回false。
这就是为什么两者都有不同的参考。