对象在javascript中的行为如何?

对象在javascript中的行为如何?,javascript,Javascript,我知道我们不能直接比较一个物体是否等于另一个。 {}={}将返回false var b = {}; b === Object(b); //true b === Object({}); //false 然而,上面的代码让我困惑,为什么b===Object({})返回false? 有人能解释一下吗?每当你在创建Object的新实例时,只要你说{}otObject({}) 所以 b===Object({})与b==={}相同。两者都将返回false var b = {}; b === Object(

我知道我们不能直接比较一个物体是否等于另一个。
{}={}
将返回false

var b = {};
b === Object(b); //true
b === Object({}); //false
然而,上面的代码让我困惑,为什么
b===Object({})
返回false?
有人能解释一下吗?

每当你在创建Object的新实例时,只要你说
{}
ot
Object({})

所以

b===Object({})
b==={}
相同。两者都将返回false

var b = {};
b === Object(b); //true
b === Object({}); //false
这就是为什么两者都有不同的引用。

它实际上在

对象构造函数为给定值创建对象包装器。如果值为null或未定义,它将创建并返回空对象,否则,它将返回与给定值对应的类型的对象如果该值已经是对象,它将返回该值。

正如你已经知道的,两个物体从来都不一样

{} == {} // false
但是,当您将对象传递给对象构造函数时,它将返回完全相同的对象,而不是新对象

var b = {};
b === Object(b); //true
在这里,您将相同的对象传递给正在再次比较的对象构造函数,对象构造函数将返回相同的对象,并且将对象与自身进行比较将返回
true
。 换句话说,上述内容与
b===b

继续讨论这个问题

b === Object({}); //false 

在这里,您传入一个空的新对象,该对象将被返回,但它永远不会是与
b
相同的对象,并且两个不同的对象永远不相等,因此
false

以及一个c#dev,我可以告诉你,即使对象是相同的,如果它们是分开的,那么它们有不同的引用,因此永远不会相等。因为当你做
Object({})
时,你正在声明一个
{/code>的新实例-它与
b
的实例不同
也将返回
false
。您需要
对象
函数做什么?或者你对此感到困惑?@Bergi-OP似乎意识到两个对象永远不相等,在我看来,困惑是关于对象构造函数的,为什么它返回它所做的?