2012-07-11 61 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