2012-07-11 63 views
0

我了解构造函数是返回对象的特殊函数。但是javascript中构造函数和对象之间的等价

> Animal = function(){this.species='animal'} 
> a=new Animal() 
> b={species:'animal'} 
> a==b 

==> false 

为什么?

+2

有关''==操作者精确细节,看看在[ECMA 262规范,部分11.9.3, “摘要相等比较算法”](HTTP://es5.github的.com /#x11.9.3)。 – 2012-07-11 21:33:13

+0

+1 Rob。 §11.9.31 f。 '如果x和y引用同一个对象,则返回true。否则,返回false# – RobG 2012-07-11 22:59:59

回答

4

这样的比较不是“深入的”比较。 “a”和“b”指的是完全相同的对象,或者它们没有。

换句话说,通过比较两个变量,你比较对象的引用,而不是对象本身。

编辑 —有原始类型(布尔型,数字,字符串)和对象引用之间的差异。就像我说的,你在问题中有一对对象引用。如果两个对象引用指向同一个对象,则认为它们是相等的。在你的情况下,他们不。他们是两个不同的对象,碰巧具有相同的属性和相同的值。对象的属性在==比较中不起作用,因为这仅仅是语言定义的工作方式。

+0

> a = 1; b = 1; a == b ==> true ...我找到一些我不在这里的东西... – lkahtz 2012-07-11 21:32:31

+0

这是如何工作的 a = 1 b = 1 a.toNumber()== b.toNumber() – scusyxx 2012-07-11 21:35:28

+0

原始类型按值进行比较。 – Radu 2012-07-11 21:35:40