在javascript中,为什么{}!== Object()?

时间:2012-01-02 10:36:15

标签: javascript object

鉴于

    var o = {};
    var p = new Object();

    p === o; //false

    o.__proto__===p.__proto__  // true

为什么这是假的?

请告诉我返回虚假的直接原因??

7 个答案:

答案 0 :(得分:6)

这两个对象包含相同的东西(即什么都没有),但它们是同一个对象。

Javascript的对象相等性测试要求两个参数引用完全相同的对象

答案 1 :(得分:5)

对象is defined as===

  

11.9.6严格的等式比较算法

     

比较x === y,其中xy是值,会产生true或   false。这样的比较如下进行:

     

...

     

7。如果truex引用同一个对象,则返回y。否则,返回   false

在这种情况下,尽管两者都是空对象,但它们是分开创建的,因此不会引用同一个对象。

作为旁注,两个结构都做同样的事情;但通常的做法是使用{}

答案 2 :(得分:3)

对象的JavaScript严格比较测试两个表达式是否引用相同的对象(正常的equals运算符也是如此)。

使用对象文字{}创建第一个对象,该对象创建一个没有属性的新对象。

通过将Object构造函数作为函数调用来创建第二个对象。根据{{​​3}}的第15.2.1.1节,这也创建了一个新对象,就像使用new Object()一样。

因此,您创建了两个对象,将其引用存储在po下,并检查po是否引用相同的对象。他们没有。

答案 3 :(得分:1)

每次创建对象时,结果都有自己独特的标识。因此,尽管它们都是空的,但它们并不是一回事。因此,===比较产生false

答案 4 :(得分:1)

使用===,结果将显示两侧的项目是否为“相同实例”

如果您想比较两个相同类型的项目,您应该使用:

var o1 = {};
var o2 = new Object();

alert( typeof(o1) === typeof(o2));

如果您想判断这两个对象是否相等(在属性和值中),您应该尝试underscore.js库并使用isEqual函数。

答案 5 :(得分:0)

这是家庭作业吗?

在这种情况下,我只会给你一些提示: - 想想前两行的作用。在这两行之后,o和p是否指向同一个对象? - 准确查找===。它是否比较两个对象以查看它们的结构是否相同?或者它是否根据对象的身份比较对象?

答案 6 :(得分:0)

对象属性的无序集合,每个属性包含原始值,对象函数 。因此,每个对象都有属性和原型,没有任何意义来比较它。