鉴于
var o = {};
var p = new Object();
p === o; //false
o.__proto__===p.__proto__ // true
为什么这是假的?
请告诉我返回虚假的直接原因??
答案 0 :(得分:6)
这两个对象包含相同的东西(即什么都没有),但它们不是同一个对象。
Javascript的对象相等性测试要求两个参数引用完全相同的对象。
答案 1 :(得分:5)
对象is defined as的===
:
11.9.6严格的等式比较算法
比较
x === y
,其中x
和y
是值,会产生true
或false
。这样的比较如下进行:...
7。如果
true
和x
引用同一个对象,则返回y
。否则,返回false
。
在这种情况下,尽管两者都是空对象,但它们是分开创建的,因此不会引用同一个对象。
作为旁注,两个结构都做同样的事情;但通常的做法是使用{}
。
答案 2 :(得分:3)
对象的JavaScript严格比较测试两个表达式是否引用相同的对象(正常的equals运算符也是如此)。
使用对象文字{}
创建第一个对象,该对象创建一个没有属性的新对象。
通过将Object
构造函数作为函数调用来创建第二个对象。根据{{3}}的第15.2.1.1节,这也创建了一个新对象,就像使用new Object()
一样。
因此,您创建了两个对象,将其引用存储在p
和o
下,并检查p
和o
是否引用相同的对象。他们没有。
答案 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)
对象是属性的无序集合,每个属性包含原始值,对象或函数 。因此,每个对象都有属性和原型,没有任何意义来比较它。