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 に答える