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

nto*_*end 27 javascript quotes json 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"
};
Run Code Online (Sandbox Code Playgroud)

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

我一直在讨论ECMAScript 5规范 ; 我能找到的是[ 第15.12.3节的注释6,强调我的 ]:

注6:对象呈现为左开括号,后跟零或多个属性,用逗号分隔,用右大括号关闭.属性是一个带引号的String,表示键或属性名称,冒号,然后是stringified属性值.数组呈现为左括号开头,后跟零个或多个值,用逗号分隔,用右括号关闭.

但是,这仅指JSON 的字符串化.

Poi*_*nty 37

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

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


Kar*_*arl 5

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

请参阅:删除要保留的代码

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