我正在尝试在google closure compiler中编译我的Js代码,并且我在此代码中收到错误
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)
答案 0 :(得分:7)
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'
};
答案 1 :(得分:3)
Ecmascript 3禁止将关键字和保留关键字作为属性名称。 Ecmascript 5解除了这个限制(他们仍然不允许作为变量和函数名称)。但是,编译器默认使用ecmascript 3模式。