2013-04-18 160 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