2016-04-28 9 views
0

私はequality comparison at MDNの文書を読みましたが、私はJavascriptが厳密な等価性検査をどのように実行するかに興味があります。Javascriptでは、2つのオブジェクトが同じかどうかをどのように判断しますか?

http://ecma-international.org/ecma-262/5.1/#sec-11.9.6もありますが、2つのオブジェクトにどのように適用されるかはわかりません。最後の声明は私が思う鍵です:

Return true if x and y refer to the same object. Otherwise, return false. 

しかし、JavaScriptが同じオブジェクトを参照しているかどうかを確認するにはどうすればよいですか?例えば

nameプロパティを持つオブジェクトKitten与え、私は自分の名前で初期化された2匹の子猫の作成:Javascriptが

次の文その
kittenA === kittenB 
ことを決定するために何を使うん

var kittenA = new Kitten("kitty A"); 
var kittenB = new Kitten("kitty B"); 

falseを返しますか?

+0

[オブジェクトリファレンスをECMAScript用語で説明する方法](http://stackoverflow.com/q/23554770/1048572)に興味があるかもしれません。私はそれの後ろにそれほど他のものがないとは思わない。 – Bergi

+0

あなたのタイトルの質問は重複したように聞こえる[JavaScriptの==と===の違い](http://stackoverflow.com/q/523643/1048572)。質問はオブジェクトに限定されていることを明確にするために編集する必要があります。 – Bergi

+0

参照が同一かどうか(つまり、 'kittenA'と' kittenB'の両方が同じ基本オブジェクトを指しているかどうか)を調べています。この場合、参照は異なるオブジェクトを指しており、その理由はfalseを返します。 – grovesNL

答えて

3

kittenAkittenBタイプobjectの両方は、ケース7が適用されている:

をxとyが同じオブジェクトを参照する場合は、true
  • 戻る
      。それ以外の場合はfalseを返します。
  • はどのようにエンジンは、彼らが同じオブジェクトに2つの参照を知っているのでしょうか?リファレンスがどのように正確に実装されるかは、エンジンごとに異なります。これは、(すべてのオブジェクトの)リスト内のメモリ位置またはインデックスを指し示す数字である可能性があります。