4

我正在尝试在google 闭包编译器中编译我的 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)中都非常适合我

4

2 回答 2

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'
};
于 2012-07-07T11:01:44.100 回答
3

Ecmascript 3 不允许关键字和保留关键字作为属性名称。Ecmascript 5 取消了这个限制(它们仍然不允许作为变量和函数名)。但是,编译器默认使用 ecmascript 3 模式。

于 2012-07-07T16:03:53.470 回答