【问题标题】:How Javascript stores objects as keys [duplicate]Javascript如何将对象存储为键[重复]
【发布时间】:2021-11-29 09:43:28
【问题描述】:

我们知道

let obj1 = {};
obj1.x = "value";

let obj2 = {"key":"value"};
obj2[obj1] = "another value";
console.log(obj2[obj1]);

上面将在控制台上正确打印“另一个值”。需要了解如何。它是否存储了 obj1 的地址以供 key 与 value 匹配?

【问题讨论】:

  • “需要了解如何。” - 然后做一个console.log(obj2);,看看这是否有助于理解。
  • 这种方式的赋值只会在创建键“[object Object]”时调用String(obj1)
  • 对象键是字符串或 Symbol 并且任何不是符号(如您的情况)都将转换为字符串,因此您可以通过执行以下操作进行检查:console.log(obj2[obj1.toString()]); 这将给出你的确切结果为console.log(obj2[obj1]);

标签: javascript


【解决方案1】:

对象属性名称可以是字符串或符号。任何不是符号的东西都将被转换为字符串。

普通对象的toString 方法会将其转换为"[object Object]"

如果您记录整个对象,您可以看到该字符串。

let obj1 = {};
obj1.x = "value";

let obj2 = {"key":"value"};
obj2[obj1] = "another value";
console.log(obj2);

console.log(obj1.toString());

当然,这确实意味着,如果您尝试在某个时候将ob2[obj3] 设置为另一个对象,那么即使obj3 是一个不同的对象,它仍然会转换为相同的字符串并覆盖之前的字符串价值。

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2017-09-23
    • 2015-09-28
    • 2015-11-01
    • 2017-12-28
    • 2011-07-14
    相关资源
    最近更新 更多