Закрытие проблем компилятора с объектом
Я пытаюсь скомпилировать мой код 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.