当键是对象时获取对象的键

时间:2016-08-24 05:53:27

标签: javascript object

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已被覆盖(不是重复键)。为什么呢?

2 个答案:

答案 0 :(得分:1)

JavaScript对象只能使用字符串作为键。因此,obj2[obj1] = 2相当于obj2[obj1.toString()] = 2; obj1.toString()"[object Object]"。因此,您的obj2实际上是{ "[object Object]": 2 }

  1. 你无法得到那些不存在的东西。

  2. 因为它不是一个对象。

  3. 不,不是。

  4. {}.toString()({ 1: 1 }).toString()相同,所以......你可以看到这会带来什么。

答案 1 :(得分:0)

为什么不使用Map而不是对象。

  

Map对象是一个简单的键/值映射。任何值(对象和原始值)都可以用作键或值。