2015-12-02 132 views
2

我不完全得到這個:混淆的Javascript屬性訪問

var one = {}; 
var two = {}; 
var three = {}; 

three[one] = "one"; 
three[two] = "two"; 

console.log(three[one]); // Alerts "two" 

據我瞭解,JS需要支架財產符號內的字符串。所以它看起來像JS正試圖改變:

three[one] = "one"; 
three[two] = "two"; 

到:

three[one.toString()] = "one"; 
three[two.toString()] = "two"; 

兩者的toString()方法沒有定義,使他們最終會被相同的值? 不知道我是否得到它。

+1

的'的ToString()'方法來自於對象的原型。嘗試在瀏覽器控制檯中鍵入'({})。toString()'。 – Pointy

+0

你基本上只是使用鍵'[object Object]'...你正在設置值:'three [「[object Object]」] =「one」;',然後覆蓋到'two',然後訪問那被覆蓋的價值。 –

+0

「[object Object]」的引號是。 – trincot

回答

4

其實toString方法的定義和結果在兩個相同的字符串([object Object])。

var one = {}; 
 
var two = {}; 
 
$('body').append(one.toString()+'<br>'+two.toString());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

2
var one = {}; 
var two = {}; 
var three = {}; 

three[one] = "one"; 
three[two] = "two"; 

最後兩行說:

three[object] = "one"; 
three[object] = "two"; 

因爲一,兩個都聲明爲對象。

你正在做的三個對象將是這樣的:

[object Object] { 
    [object Object]: "two" 
}