28

私はいつもこれを目にします: 一部のキーが引用符で囲まれ、他のキーが囲まれていないように宣言されたオブジェクト リテラル。jQuery 1.4.2 の例:

jQuery.props = {
    "for": "htmlFor",
    "class": "className",
    readonly: "readOnly",
    maxlength: "maxLength",
    cellspacing: "cellSpacing",
    rowspan: "rowSpan",
    colspan: "colSpan",
    tabindex: "tabIndex",
    usemap: "useMap",
    frameborder: "frameBorder"
};

for最初の 2 つのプロパティ キー (と) を引用符で囲み、残りを引用符なしのままにすることの意味は何ですか? class違いはありますか?

私はECMAScript 5 仕様を調べてきました。私が見つけることができたのは[セクション15.12.3の注6、強調私のもの]:

注 6 オブジェクトは左中かっこの後に 0 個以上のプロパティが続き、カンマで区切られ、右中かっこで閉じられます。プロパティは、キーまたはプロパティ名、コロン、文字列化されたプロパティ値を表す引用符で囲まれた文字列です。配列は左大括弧の後に 0 個以上の値が続き、カンマで区切られ、右大括弧で閉じられます。

ただし、これはJSONの文字列化のみを指します。

4

5 に答える 5

37

これらは Javascript の予約語であり、(実際には必要ではありませんが) 言語の構文では引用符で囲む必要があります。

厳密に言えば、純粋な「JSON」表記では、すべての「キー」文字列を引用符で囲む必要があります。ただし、Javascript 自体は、引用符で囲まれていない有効な識別子 (予約語ではない) であるキーで問題ありません。

于 2010-02-27T20:35:56.687 に答える
5

この時点 (2 年以上後) で、オブジェクト リテラル プロパティを引用する理由があります。Closure Compiler を使用してコードを縮小したい場合は、他のソース ファイルからプロパティにアクセスできるようにする必要がある場合があります。その場合、コンパイラによってシンボルの名前が変更されるのを避けたいと思うでしょう。プロパティ名を引用することにより、Closure Compiler はそれらを縮小 (名前変更) しません。

参照:残しておきたいコードの削除

(これは、少なくとも ADVANCED_OPTIMIZATIONS 設定に適用されます。)

于 2012-10-26T16:30:52.377 に答える
2

Javascript 言語のキーワードまたは予約済みのキーワードは、常に引用符で囲まれています。

于 2010-02-27T20:35:45.907 に答える
1

Javascript には、言語で実際には使用されていない予約語がたくさんありますが、将来の使用のために予約されていると思います。classJavascript は実際にはクラスを使用しませんが、これらの 1 つです。もう 1 つはgoto、これが使用される可能性はまったくありません。ただし、結果として、これらを json キーとして使用する場合は、引用符で囲む必要があります。厳密に言えば、javascript の未使用の予約語トラップに引っかかる可能性を避けるために、おそらく常にキーを引用符で囲む必要があります (注意してください - 私は決してしません)。

于 2010-02-27T20:51:25.603 に答える
1

forclassは言語キーワードです。それらが引用符で囲まれていない場合、インタープリターは SyntaxError をスローします。

リンク先の仕様のセクション 7.6.1.1 を参照してください。

于 2010-02-27T20:36:21.170 に答える