2013-05-29 18 views
0

比方說,我有這個全局對象:訪問JavaScript對象用繩子

funky_baby = { 
    "wonk wonk": "clunk", 
    "zipee": "chugga chugga", 
    "ahoooga": "boioioioing" 
}; 

而且我想用字符串「funky_baby」來訪問它。我目前使用這種方法:

window["funky_baby"]; 

這似乎並不像它會對我非常多瀏覽器友好。有沒有更好的方法來完成這項任務?

+2

也許'window.funky_baby' –

+0

基於什麼是語言*定義*用於訪問性能 – Dennis

+0

請搜索第一有*很多重複*即。 http://stackoverflow.com/questions/4968406/javascript-property-access-dot-notation-vs-brackets, – user2246674

回答

4

正如this question接受的答案中所解釋的那樣,只要您不想在IE8或更早版本中遍歷其成員,您的代碼就非常好。你可以,但是,聲明爲

window.funky_baby = {"wonk wonk", "zipee", "ahoooga"}; 

而且你已經解決了,太多:)

+0

太好了,謝謝!我認爲IE8可能存在問題,這就是我問到的原因。我認爲它仍佔我們客戶羣的15%以上! –

3

這是完美的「多瀏覽器」友好。

obj["string"]; 

var string = "string"; 
obj[string]; 
obj.string; 

全部完全有效。 即使您訪問的是window,只要您可以保證該程序僅適用於網絡瀏覽器,因爲window保證在此情況下成爲全球DOM的一部分。

除了你沒有一個真實的物體,那裏。

var obj = { 
    key1 : value1, 
    key2 : value2 
}; 

如果你沒有在那裏的值,它會中斷。

+0

哎呀,我會編輯!謝謝你,先生。 –

2

如果您正試圖通過它的名字來訪問一個變量作爲一個字符串(姑且不論對象是不是一個真正的對象),window["varName"]是做到這一點的最佳方式。

這僅僅是特別有用的,如果你要訪問的變量本身(例如訪問window["blue"]在一種情況下,但window["yellow"]在另一個變化:

var blue = "Blue", 
    yellow = "Yellow"; 

function (color) { 
    console.log(window[color]); 
} 

如果你只是試圖訪問該變量,只是輸入變量名:?。

console.log(funky_baby); 
+0

庫爾人,這是我需要的 –