我理解构造函数是一个返回对象的特殊函数。但
> Animal = function (){this.species='animal'}
> a=new Animal()
> b={species:'animal'}
> a==b
==> false
为什么?
答案 0 :(得分:4)
这样的比较不是“深度”比较。 “a”和“b”指的是完全相同的对象,或者它们不是。
换句话说,通过比较两个变量,比较对象的引用,而不是对象本身。
编辑 - 原始类型(布尔值,数字,字符串)和对象引用之间存在差异。就像我说的,你在问题中得到的是一对对象引用。如果两个对象引用引用相同的对象,则它们被认为是相等的。在你的情况下,他们没有。它们是两个碰巧具有相同属性且具有相同值的不同对象。对象的属性在==
比较中不起作用,因为这只是定义语言的工作方式。
答案 1 :(得分:2)
在这里阅读更多关于真理和平等的内容。非常好的帖子。
http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/