let obj1 = {
1: 1
};
let obj2 = {};
obj2[obj1] = 2;
let keys = Object.keys(obj2);
// first
for (let key of keys) {
console.log(key) // [object Object]
}
for (let prop in obj2) {
console.log(prop) // [object Object]
}
let key = keys[0];
// second
console.log(typeof key); // string
console.log(JSON.stringify(key) === JSON.stringify(obj1)); // false
// thirth
console.log(obj2['[object Object]']); // 2
obj2[{}] = 3;
// fourth
console.log(obj2['[object Object]']); // 3
console.log(obj2[obj1]); // 3
我有4个问题:
1 /.第一种:是否有办法获取对象
{
1: 1
}
而不是[object object]
?
2 /.第二种:为什么我在尝试获取对象类型(而不是string
)时获得object
?
3 /.在thirth中:对象的关键是一个对象。那么,为什么我可以通过字符串分配它?
4 /.在第四个:向obj2
添加另一个对象后,虽然obj1
与{}
不同,但obj1
已被覆盖(不是重复键)。为什么呢?
答案 0 :(得分:1)
JavaScript对象只能使用字符串作为键。因此,obj2[obj1] = 2
相当于obj2[obj1.toString()] = 2
; obj1.toString()
是"[object Object]"
。因此,您的obj2
实际上是{ "[object Object]": 2 }
。
你无法得到那些不存在的东西。
因为它不是一个对象。
不,不是。
{}.toString()
与({ 1: 1 }).toString()
相同,所以......你可以看到这会带来什么。
答案 1 :(得分:0)
为什么不使用Map
而不是对象。
Map对象是一个简单的键/值映射。任何值(对象和原始值)都可以用作键或值。