4

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

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

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

我使用了一个传递函数(我无法控制),它在 object 中返回解析的 JSON 响应result

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

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

它不起作用,我认为是因为开头的4 ... 与另一个对象相同的操作可以正常工作:

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

我知道resultobject 包含 object 4Sync,但我无法访问它。这是 Chrome 控制台的屏幕截图:

Chrome 控制台的屏幕截图

有什么办法可以解决这个问题吗?

4

1 回答 1

9

使用方括号:

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

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

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

MemberExpression :
    PrimaryExpression
    FunctionExpression
    MemberExpression [ Expression ]
    MemberExpression . IdentifierName

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

于 2013-04-18T13:11:05.957 回答