我理解构造函数是一个返回对象的特殊函数。但
> Animal = function (){this.species='animal'}
> a=new Animal()
> b={species:'animal'}
> a==b
==> false
为什么?
我理解构造函数是一个返回对象的特殊函数。但
> 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/