JavaScript关联数组表现奇怪

mri*_*rid 1 javascript arrays associative-array

我有两个对象.当我将这些作为键传递给关联数组并赋值时,所有值都存储错误(最后一个除外).

谁能告诉我我做错了什么?

var usrMrid = {name: "mrid"};
var usrXYZZ = {name: "xyzz"};

var comm = {};

comm[usrMrid] = "ONE";
comm[usrXYZZ] = "TWO";

console.log("usrMrid: " + comm[usrMrid]); // this gives TWO, when it should give ONE
console.log("usrXYZZ: " + comm[usrXYZZ]); // this works fine
Run Code Online (Sandbox Code Playgroud)

Sur*_*yan 7

当您使用[]带有对象的语法并将对象作为属性名称传递时,属性名称将成为string给定表达式的表示形式,这将在您的情况下[object Object].因此,当您使用不同的对象时,它们会使用名称创建相同的属性[object Object]并覆盖以前的属性.

您可以在示例中看到它.在这里,我打印对象的属性,你可以看到只有一个属性名称[object Object].

var usrMrid = {name: "mrid"};
var usrXYZZ = {name: "xyzz"};

var comm = {};

comm[usrMrid] = "ONE";
comm[usrXYZZ] = "TWO";

console.log(comm);
Run Code Online (Sandbox Code Playgroud)

你可以Map用于那种情况

var usrMrid = {name: "mrid"};
var usrXYZZ = {name: "xyzz"};

var comm = new Map([
  [usrMrid, "ONE"],
  [usrXYZZ, "TWO"]
]);

console.log(comm.get(usrMrid));
Run Code Online (Sandbox Code Playgroud)