gpt4 book ai didi

javascript - 将键值对添加到 javascript 对象,其中 key 是一个对象

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

1) 我试图将一系列键值对添加到 JS 普通对象中,其中键本身是一个对象。每次我添加键值对时,该对象都会被覆盖(请参阅实时 here )。

var x = {};

var y = {
'name': 'cat',
'note': 'lazy animal'
}
var yy = 'meow'

x[{
'name': 'dog',
'note': 'loyal animal'
}] = 'bhow'
x[y] = yy

for(var k in x) {
console.log(k);
console.log(x[k]);
}

控制台输出:

"[object Object]"
"meow"

2) 当键是字符串时,不会发生这种情况(覆盖行为)(请参阅实时 here )。

var x = {};

var y = 'cat'
var yy = 'meow'

x['dog'] = 'bhow'
x[y] = yy

for(var k in x) {
console.log(k);
console.log(x[k]);
}

控制台输出:

"dog"
"bhow"
"cat"
"meow"

想了解为什么会发生这种情况吗?

我通过研究其他问题找到了一些解决方案(here)。但我无法理解这里的概念。任何指导将不胜感激。

最佳答案

对象键必须是字符串(或符号),因此当您尝试使用对象作为键时,它首先将其转换为字符串表示形式,您看到的是“[object Object]” .

但是,您可以通过覆盖对象上的toString函数来完成您想做的事情,只要您为每个对象返回一个唯一的字符串(可能是对象内容的哈希值),您的代码将按预期工作,因为它将使用 toString 函数来获取对象的字符串表示形式,并将其用作键:

var x = {};

var y = {
'name': 'cat',
'note': 'lazy animal',
toString: function() {
return 'yobj';
}
};
var yy = 'meow';

x[{
'name': 'dog',
'note': 'loyal animal',
toString: function() {
return 'xobj';
}
}] = 'bhow';
x[y] = yy;

for (var k in x) {
console.log(k);
console.log(x[k]);
}

<小时/>

正如 Jared 在 his comment 中提到的那样,Map object(去年在 ES6 中引入)部分是为了解决这个问题而设计的,如果你在 environment that supports its use 中运行,它允许你直接使用对象作为你的键。 .

关于javascript - 将键值对添加到 javascript 对象,其中 key 是一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37816752/

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