为什么引用了一些对象 - 文字属性而没有引用其他属性?

时间:2010-02-27 20:34:28

标签: javascript json quotes object-literal

我一直看到这一点:声明了对象文字,使得某些键被引号括起而其他键则没有。来自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"
};

用引号包装前两个属性键( forclass )的重要性是什么,而其他属性键是否少引用?是否有任何差异?

我一直在寻找ECMAScript 5 specification;我能找到的只是[第15.12.3节的注释6,强调我的]:

  

注6:对象呈现为   打开左支撑,然后是零或   更多属性,用。分隔   逗号,用右支撑关闭。 :一种   property是带引号的String   代表键或属性名称,   一个冒号,然后是字符串   适当的价值。呈现数组   作为开口左括号后跟   零个或多个值,用。分隔   逗号,用右括号关闭。

但是,这仅指JSON的 stringification

5 个答案:

答案 0 :(得分:37)

这些是Javascript保留字,并且(虽然不是非常必要)语言的语法要求引用它们。

严格地说,纯“JSON”表示法要求引用“密钥”字符串的所有。然而,Javascript本身可以使用有效标识符(但不是保留字)的键是不加引号的。

答案 1 :(得分:5)

此时(两年多后)引用对象文字属性是有原因的。如果想要使用Closure Compiler缩小其代码,他们可能需要使其他源文件可以访问这些属性。在这种情况下,他们希望避免编译器重命名符号。通过引用属性名称,Closure Compiler不会缩小(重命名)它们。

请参阅:Removal of code you want to keep

(这至少适用于ADVANCED_OPTIMIZATIONS设置。)

答案 2 :(得分:2)

Javascript语言关键字或保留关键字总是被引号包围。

答案 3 :(得分:1)

forclass是语言关键字。当那些不带引号时,你的解释器会抛出一个SyntaxError。

请参阅您链接到的规范中的第7.6.1.1节。

答案 4 :(得分:1)

Javascript有很多实际上没有使用的保留字,我认为这些保留字可能用于将来使用。 class就是其中之一,即使Javascript实际上并没有使用类。另一个是goto,绝对没有机会被使用过。然而,结果是如果你想将它们用作json密钥,那么必须引用它。严格来说,你应该总是引用你的密钥,以避免javascript未使用的保留字陷阱犯规的可能性(请注意 - 我从来没有这样做)。