我了解构造函数是返回对象的特殊函数。但是javascript中构造函数和对象之间的等价
> Animal = function(){this.species='animal'}
> a=new Animal()
> b={species:'animal'}
> a==b
==> false
为什么?
我了解构造函数是返回对象的特殊函数。但是javascript中构造函数和对象之间的等价
> Animal = function(){this.species='animal'}
> a=new Animal()
> b={species:'animal'}
> a==b
==> false
为什么?
这样的比较不是“深入的”比较。 “a”和“b”指的是完全相同的对象,或者它们没有。
换句话说,通过比较两个变量,你比较对象的引用,而不是对象本身。
编辑 —有原始类型(布尔型,数字,字符串)和对象引用之间的差异。就像我说的,你在问题中有一对对象引用。如果两个对象引用指向同一个对象,则认为它们是相等的。在你的情况下,他们不。他们是两个不同的对象,碰巧具有相同的属性和相同的值。对象的属性在==
比较中不起作用,因为这仅仅是语言定义的工作方式。
了解更多关于真相与平等。非常好的帖子。
http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
谢谢。阅读它。我发现更多:http://stackoverflow.com/questions/1068834/object-comparison-in-javascript – lkahtz 2012-07-11 21:40:17
有关''==操作者精确细节,看看在[ECMA 262规范,部分11.9.3, “摘要相等比较算法”](HTTP://es5.github的.com /#x11.9.3)。 – 2012-07-11 21:33:13
+1 Rob。 §11.9.31 f。 '如果x和y引用同一个对象,则返回true。否则,返回false# – RobG 2012-07-11 22:59:59