構築関数はオブジェクトを返す特殊関数であることを理解しています。だが
> 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」はまったく同じオブジェクトを指しているか、そうでないかのどちらかです。
言い換えると、2つの変数を比較することで、オブジェクト自体ではなく、オブジェクトへの参照を比較します。
編集—プリミティブ型(ブール値、数値、文字列)とオブジェクト参照には違いがあります。私が言ったように、あなたがあなたの質問に持っているのは、オブジェクト参照のペアです。2つのオブジェクト参照が同じオブジェクトを参照している場合、それらは等しいと見なされます。あなたの場合、そうではありません。これらは、同じ値を持つ同じプロパティを持つ2つの異なるオブジェクトです。オブジェクトのプロパティは==
、言語が機能するように定義されているだけなので、比較には関与しません。
真実と平等について詳しくはこちらをご覧ください。とても良い投稿です。
http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/