Closure编译器与对象的问题

时间:2012-07-07 10:48:48

标签: javascript google-closure-compiler

我正在尝试在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)

2 个答案:

答案 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模式。