gpt4 book ai didi

javascript - 当使用对象作为映射时,它的键总是转换为字符串。为什么?

转载 作者:行者123 更新时间:2023-11-28 11:50:50 24 4
gpt4 key购买 nike

以下代码:

let user1={name: "Sam"};
let user2={name:"Tyler"};
let totalReplies={};
totalReplies[user1]=5;
totalReplies[user2]=42;
console.log(totalReplies[user1]);
console.log(totalReplies[user2]);

生成输出:

42
42

我期望的输出是:

5
42

读起来,我发现“当使用对象作为映射时,它的键总是转换为字符串”。我不确定我是否理解这意味着什么或为什么对象键被转换为字符串。不管怎样,理解为什么输出是 42 42 应该有助于强化这个概念。

最佳答案

JavaScript 对象仅支持字符串和符号作为键。

在这种情况下,JS 会将对象强制转换为字符串值(类似于 [object Object])。

所以基本上你的代码将相当于:

let user1={name: "Sam"};
let user2={name:"Tyler"};
let totalReplies={};
totalReplies['[object Object]']=5;
totalReplies['[object Object]']=42;
console.log(totalReplies['[object Object]']);
console.log(totalReplies['[object Object]']);

您可以在此处了解有关强制转换的更多信息: http://webreflection.blogspot.ch/2010/10/javascript-coercion-demystified.html

解决方案

如果需要在ES6+中使用对象作为键,可以使用 Maps而不是对象作为数据存储:

let user1={name: "Sam"};
let user2={name:"Tyler"};
let totalReplies = new Map();
totalReplies.set(user1, 5);
totalReplies.set(user2, 42);
console.log(totalReplies.get(user1));
console.log(totalReplies.get(user2));

关于javascript - 当使用对象作为映射时,它的键总是转换为字符串。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37750061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com