6

このコードでは何が起こっていますか?

var a = {a:1};
var b = {b:2};
var c = {};

c[a] = 1;
c[b] === 1 // true!

c[b] = 2;
c[a] === 2 // true!

具体的には、ルックアップを使用bするcと のプロパティに格納された値が返されるのはなぜaですか?

JavaScript でオブジェクトをプロパティのキーとして使用するとはどういう意味ですか?

Chrome/Node と Firefox でこれをテストしました。

4

2 に答える 2

12

JavaScript でオブジェクトをプロパティのキーとして使用するとはどういう意味ですか?

Javascript オブジェクトは文字列キーのみを許可するため、オブジェクトは最初に文字列に強制されます。

具体的には、c で b を検索すると、a のプロパティに格納されていた値が返されるのはなぜですか?

{a: 1}との文字列表現{b: 2}両方とも "[object Object]"であるため、プロパティは上書きされます。

編集:オブジェクトをキーとして使用する必要がある 場合(可能であれば別のソリューションを希望します)、オブジェクトの JSON 表現を使用できます。

c[JSON.stringify(a)] = 1
c[JSON.stringify(b)] = 2

しかし、もう一度、別のアプローチを考えてみてください。オブジェクトには、オブジェクト自体以外の一意の識別子がある可能性があります。

于 2012-09-12T10:49:01.700 に答える
2

オブジェクトをキーとして使用する理由は、キーがobject.toString()の結果になるためです[Object Object]

したがって、プロパティに値を設定し、プロパティ"[Object Object]"によって値を取得します"[Object Object]"

于 2012-09-12T10:50:49.780 に答える