今日、JS オブジェクトについて説明している本を見ましたが、よく理解できない例がありました
ここでの [object Object] は、このステップ myObject[myObject] = "foo"; の myObject の暗黙的な型変換によって取得されるため、ここでの [object Object] は単なる変換された文字列ですが、オブジェクト内では '[object Object]' として扱われます。値「foo」をキーとして保存します。
myObject[myObject] = "foo";
リーリー
これはオブジェクトキー名の暗黙的な変換の問題です。 次の例を現地語で説明してみましょう:
A オブジェクトがあり、B オブジェクトを A オブジェクトのキー名として渡したいのですが、オブジェクトのキー名はすべて文字列であるため、B オブジェクトは toString() メソッドを呼び出して変換します。文字列 "[ object Object]" に変換して、A オブジェクトのキー名としてデータを格納します。インスタンス内のデータは、この "foo" 文字列です。
特別な注意が必要なもう 1 つの点は次のとおりです。 ご質問の A オブジェクトと B オブジェクトは同じであり、非常に混乱を招くため、それらを区別するために新しい mykey を宣言しました。
出力結果は true です。これは、「[object Object]」が {} と等しくないが、toString() メソッドを渡した後にオブジェクトによって返された文字列と等しいことを証明します
上記の 3 行のコードは、「[object Object]」が toString() メソッドを渡した後にオブジェクトによって返される文字列と等しいことを再度証明します
キー値は自動的に文字列に変換されます
ここでの [object Object] は、このステップ
myObject[myObject] = "foo";
の myObject の暗黙的な型変換によって取得されるため、ここでの [object Object] は単なる変換された文字列ですが、オブジェクト内では '[object Object]' として扱われます。値「foo」をキーとして保存します。リーリー
リーリー
これはオブジェクトキー名の暗黙的な変換の問題です。
次の例を現地語で説明してみましょう:
A オブジェクトがあり、B オブジェクトを A オブジェクトのキー名として渡したいのですが、オブジェクトのキー名はすべて文字列であるため、B オブジェクトは toString() メソッドを呼び出して変換します。文字列 "[ object Object]" に変換して、A オブジェクトのキー名としてデータを格納します。インスタンス内のデータは、この "foo" 文字列です。
特別な注意が必要なもう 1 つの点は次のとおりです。
リーリーご質問の A オブジェクトと B オブジェクトは同じであり、非常に混乱を招くため、それらを区別するために新しい mykey を宣言しました。
リーリー
キー値は自動的に文字列に変換されます