2012-02-01 40 views
3

我很困惑object[foo]術語所指的是什麼。任何提示?我知道bar['unique_prop']bar.unique_prop2對象[foo]術語的含義是什麼?

var foo = {unique_prop: 1}; 
    var bar = {unique_prop: 2}; 
    var object = {}; 
    object[foo] = 'value'; 
    alert(object[bar]); 

code on jsfiddle

+0

對不起,我沒有完全理解這個問題,它不能被撤消。 – 2012-02-01 12:30:48

+0

@ÁlvaroG.Vicario如果問題已關閉,它可以撤消。它可以重新打開。 :) – 2012-02-01 12:31:40

+0

大聲笑,不用擔心我甚至不知道它是你 – user784637 2012-02-01 12:32:03

回答

5

此:

var foo = 'abc'; 
object[foo] 

等同於:

object.abc 

然而這樣的:

var foo = {unique_prop: 1}; 
object[foo] = 'value'; 

沒有多少意義(對象屬性名稱不能是對象字面值)。 JS引擎將使用foo.toString()(例如"[object Object]"返回),所以實際上你這樣做:

var foo = {unique_prop: 1}; 
object["[object Object]"] = 'value'; 

這顯然是一個錯誤或誤解。此行爲在Member OperatorsMDN中解釋:

屬性名稱必須是字符串。這意味着非字符串對象不能用作對象中的鍵。包含數字的任何非字符串對象都通過toString方法被類型化爲一個字符串。

但是,您可以使用:

object[foo.unique_prop] = 'value'; 

這相當於:

object[1] = 'value'; 
+0

我很困惑,因爲這是我第一次看到括號內的對象文字,這是一個mozilla網站的例子,我從https獲得代碼片段://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators – user784637 2012-02-01 12:34:32

+0

@LedZeppelin:您引用的文檔解釋了這種行爲,我相應地更新了我的答案。 – 2012-02-01 12:37:13

2

這是一樣的object.whatever_x_is其中xfoo.toString()這將是相同的bar.toString()以來(除覆蓋)在通用對象上調用toString將生成一個通用的「是對象」字符串,如"[object Object]"

1
object[foo] = 'value'; 

嘗試使用一個對象作爲成員名稱,這會導致調用.toString();

'value'被分配到object["[object Object]"],當你試圖讀取alert(object[bar]);相同toString()發生是由於bar也是一個對象,所以你參考object["[object Object]"]再次,回到'value」。

相關問題