对象作为对象属性名称错误?

时间:2016-06-13 01:57:23

标签: javascript properties

var a = {};
var b = new Object();
var c = new Object();
a[b] = 123;
a[c] = 456;
console.log(a[b]); //output is 456, why?
console.log(a[c]); //output is 456, why?

这是如何工作的,a[b]输出是456,为什么?

2 个答案:

答案 0 :(得分:3)

由于对象是作为对象键提供的,因此使用toString()将其转换为字符串。

var b = new Object();
console.log(b.toString());
[object Object]

因此,var bvar c都会转换为[object Object]。对象引用如下:

a["[object Object]"] = 123;
a["[object Object]"] = 456;

[object Object]的最新值为456。

您可以尝试打印值来验证这一点:

a["[object Object]"]
456
a[(new Object()).toString()]
456

答案 1 :(得分:0)

没有意义,但是......

var a = {};
var b = {}; // new Object();
var c = {}; // new Object();

a[b] = 123; // Object in object {'[object Object]': 123}

现在它将被覆盖

a[c] = 456; // Object in object {'[object Object': 456}

a [c] 等于到a [b];

console.log(a[b]); // Output is  456!
console.log(a[c]); // Output is  456!