2016-06-13 43 views
0
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,爲什麼?對象作爲對象屬性名稱錯誤?

+0

整體概念沒有意義。你想做什麼? – charlietfl

+0

我猜你的對象實例化被覆蓋,因爲只是聲明,而不是初始化,b或c作爲一個對象修復它 – Li357

回答

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 
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} 

一個並[c]是等於到並[b];

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