我瞭解構造函數是返回對象的特殊函數。但是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