Javascript: доступ к свойству объекта, имя которого начинается с числа


Я создаю Javascript / приложение jQuery .

Мне нужно обработать ответ 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

Это не работает, я думаю это из-за 4 в начале ... Та же операция с другим объект работает нормально:

var usedStorage = result.accounts.MediaFire.usedStorage; //works
Я знаю, что объект result содержит объект 4Sync, но я не могу получить к нему доступ. Вот скриншот консоли Chrome:

скриншот консоли Chrome

Есть ли обходной путь для решения этой проблемы?

1 4

1 ответ:

Используйте квадратные скобки:

var usedStorage = result.accounts["4Sync"].usedStorage;
Идентификаторы свойств могут начинаться с числа, но выражения-члены с символом . допускают только допустимые идентификаторы переменных (поскольку все остальное неоднозначно). Чтобы обойти это, вы можете использовать синтаксис квадратных скобок, который эквивалентен, но позволяет использовать любую строку.

Если вам интересно, вот грамматика :

MemberExpression :
    первичное выражение
    выражение функции
    MemberExpression [ Выражение ]
    MemberExpression . IdentifierName

Обратите внимание, что квадратные скобки могут содержать любое выражение, но за . может следовать только IdentifierName (в основном, любой действительный идентификатор плюс зарезервированные слова в ES5).