Закрытие проблем компилятора с объектом

Я пытаюсь скомпилировать мой код Js в компиляторе Google Closure, и я получаю ошибку в этом коде

  var settings = {
                 providers: ['A', 'B', 'C'],
                 interface: 'basic16',
                 apikey: 'XXXXX-XXXXX-XXXXX-XXXXXXXXXX'
                 }

Ошибки

JSC_PARSE_ERROR: Parse error. invalid property id at line 3 character 10
interface: 'basic16',
          ^
JSC_PARSE_ERROR: Parse error. syntax error at line 3 character 11
interface: 'basic16',
           ^
JSC_PARSE_ERROR: Parse error. syntax error at line 4 character 8
apikey: 'XXXXX-XXXXX-XXXXX-XXXXXXXXXX'
        ^

Но этот код прекрасно работает для меня в любом браузере (Chrome, Firefox, Opera, Safari, IE7,8,9)

2 ответа

Решение

MDN утверждает, что ключевое слово interface зарезервировано для будущего использования и не может использоваться для имен свойств / функций / переменных.

https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words

Дело в том, что MDN также утверждает, что использование этого ключевого слова ограничено только в строгом режиме. Так что я не совсем уверен, правильно ли работает компилятор замыкания, когда жалуется на это даже в нестрогом режиме. Это больше похоже на ошибку, но в любом случае, вероятно, лучше избегать использования этих ключевых слов.

Однако решение состоит в том, чтобы просто заключить идентификатор в кавычки:

var settings = {
    providers: ['A', 'B', 'C'],
    'interface': 'basic16',
    apikey: 'XXXXX-XXXXX-XXXXX-XXXXXXXXXX'
};

Ecmascript 3 запретил использование ключевых слов и зарезервированных ключевых слов в качестве имен свойств. Ecmascript 5 снял это ограничение (они по-прежнему запрещены как имена переменных и функций). Однако по умолчанию компилятор использует режим ecmascript 3.

Другие вопросы по тегам