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

时间:2013-04-18 13:09:47

标签: javascript jquery json variables hashmap

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

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

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

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

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

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

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

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

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

screenshot of Chrome's console

有解决方法吗?

1 个答案:

答案 0 :(得分:7)

使用方括号:

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

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

如果您有兴趣,请点击the grammar

  

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

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