Javascript:访问名称以数字开头的对象属性

Mik*_*ikO 4 javascript variables jquery json hashmap

我正在创建一个Javascript/jQuery应用程序.

我需要处理一个表示a 的JSON响应HashMap,如下所示:

  {
    "accounts": {
      "MediaFire": {
       "provider": "MediaFire",
       "usedStorage": "779680",
       "totalStorage": "53687091200"
      },
      "4Sync": {
       "provider": "4Sync",
       "usedStorage": "620692",
       "totalStorage": "16106127360"
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我使用了一个pasing函数(我无法控制),它返回一个对象中解析的JSON响应result.

当我尝试访问4Sync这样的时候:

var usedStorage = result.accounts.4Sync.usedStorage; //doesn't work
Run Code Online (Sandbox Code Playgroud)

它不起作用,我认为这是因为开头的4 ...与其他对象相同的操作工作正常:

var usedStorage = result.accounts.MediaFire.usedStorage; //works
Run Code Online (Sandbox Code Playgroud)

我知道result对象包含对象4Sync,但我无法访问它.以下是Chrome控制台的屏幕截图:

Chrome控制台的屏幕截图

有没有解决方法可以解决这个问题?

Jam*_*ice 7

使用方括号:

var usedStorage = result.accounts["4Sync"].usedStorage;
Run Code Online (Sandbox Code Playgroud)

属性标识符可以以数字开头,但具有该.字符的成员表达式将仅允许有效的变量标识符(因为其他任何内容都不明确).要解决这个问题,您可以使用方括号语法,它等效但允许使用任何字符串.

如果你有兴趣,这是语法:

MemberExpression:
    PrimaryExpression
    FunctionExpression
    MemberExpression [ 表达式 ]
    MemberExpression . IdentifierName

注意方括号可以包含任何表达式,但.只能跟一个IdentifierName(基本上,任何有效的标识符,加上ES5中的保留字).