2013-04-18 102 views
4

我正在創建一個Javascript/jQuery應用程序。Javascript:訪問名稱以數字開頭的對象屬性

我需要處理一個JSON響應一個表示HashMap,像這樣:

{ 
    "accounts": { 
     "MediaFire": { 
     "provider": "MediaFire", 
     "usedStorage": "779680", 
     "totalStorage": "53687091200" 
     }, 
     "4Sync": { 
     "provider": "4Sync", 
     "usedStorage": "620692", 
     "totalStorage": "16106127360" 
     } 
    } 
    } 

我使用考取函數(我無法控制),它返回在所解析的JSON響應對象result

當我嘗試訪問4Sync這樣的:

var usedStorage = result.accounts.4Sync.usedStorage; //doesn't work 

它不工作,我覺得這是因爲之初 ...與其他相同的操作對象正常工作:

var usedStorage = result.accounts.MediaFire.usedStorage; //works 

我知道result對象包含對象4Sync,但我不能訪問它。這是Chrome的控制檯的截圖:

screenshot of Chrome's console

有任何解決方法來解決這個問題?

+0

請注意,這個問題與JSON無關:JSON是您解析它的字符串表示_before_。您的'result'變量引用瞭解析JSON結果的對象。問題是「如何訪問以數字開頭的對象屬性」... – nnnnnn

+0

@nnnnnn這絕對是真的,我編輯了標題... – MikO

回答

7

使用方括號:

var usedStorage = result.accounts["4Sync"].usedStorage; 

物業identifers可以以數字開頭,但與.角色成員表達式將只允許合法的變量標識符(因爲別的不明確)。爲了解決這個問題,你可以使用方括號語法,它是等價的,但允許使用任何字符串。

如果你有興趣,這裏是the grammar

MemberExpression
        PrimaryExpression
        FunctionExpression
        MemberExpression[表達]
        MemberExpression.IdentifierName

通知如何方括號可以包含任何表達式,但.只能後跟IdentifierName (基本上,任何有效的標識符,以及ES5中的保留字)。

+0

非常有用的答案,非常感謝! – MikO