0

我理解构造函数是一个返回对象的特殊函数。但

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

==> false

为什么?

4

2 回答 2

4

像这样的比较不是“深度”比较。“a”和“b”要么指代完全相同的对象,要么不指代相同的对象。

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

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

于 2012-07-11T21:30:39.543 回答
2

在此处阅读有关真理与平等的更多信息。非常好的帖子。

http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

于 2012-07-11T21:39:14.000 回答