我很困惑object[foo]
術語所指的是什麼。任何提示?我知道bar['unique_prop']
和bar.unique_prop
指2
對象[foo]術語的含義是什麼?
var foo = {unique_prop: 1};
var bar = {unique_prop: 2};
var object = {};
object[foo] = 'value';
alert(object[bar]);
我很困惑object[foo]
術語所指的是什麼。任何提示?我知道bar['unique_prop']
和bar.unique_prop
指2
對象[foo]術語的含義是什麼?
var foo = {unique_prop: 1};
var bar = {unique_prop: 2};
var object = {};
object[foo] = 'value';
alert(object[bar]);
此:
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';
我很困惑,因爲這是我第一次看到括號內的對象文字,這是一個mozilla網站的例子,我從https獲得代碼片段://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators – user784637 2012-02-01 12:34:32
@LedZeppelin:您引用的文檔解釋了這種行爲,我相應地更新了我的答案。 – 2012-02-01 12:37:13
這是一樣的object.whatever_x_is
其中x
是foo.toString()
這將是相同的bar.toString()
以來(除覆蓋)在通用對象上調用toString
將生成一個通用的「是對象」字符串,如"[object Object]"
object[foo] = 'value';
嘗試使用一個對象作爲成員名稱,這會導致調用.toString()
;
'value'
被分配到object["[object Object]"]
,當你試圖讀取alert(object[bar]);
相同toString()
發生是由於bar
也是一個對象,所以你參考object["[object Object]"]
再次,回到'value
」。
對不起,我沒有完全理解這個問題,它不能被撤消。 – 2012-02-01 12:30:48
@ÁlvaroG.Vicario如果問題已關閉,它可以撤消。它可以重新打開。 :) – 2012-02-01 12:31:40
大聲笑,不用擔心我甚至不知道它是你 – user784637 2012-02-01 12:32:03