我一直看到这一点:声明了对象文字,使得某些键被引号括起而其他键则没有。来自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
和class
)的重要性是什么,而其他属性键是否少引用?是否有任何差异?
我一直在寻找ECMAScript 5 specification;我能找到的只是[第15.12.3节的注释6,强调我的]:
注6:对象呈现为 打开左支撑,然后是零或 更多属性,用。分隔 逗号,用右支撑关闭。 :一种 property是带引号的String 代表键或属性名称, 一个冒号,然后是字符串 适当的价值。呈现数组 作为开口左括号后跟 零个或多个值,用。分隔 逗号,用右括号关闭。
但是,这仅指JSON的 stringification 。
答案 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)
for
和class
是语言关键字。当那些不带引号时,你的解释器会抛出一个SyntaxError。
请参阅您链接到的规范中的第7.6.1.1节。
答案 4 :(得分:1)
Javascript有很多实际上没有使用的保留字,我认为这些保留字可能用于将来使用。 class
就是其中之一,即使Javascript实际上并没有使用类。另一个是goto
,绝对没有机会被使用过。然而,结果是如果你想将它们用作json密钥,那么必须引用它。严格来说,你应该总是引用你的密钥,以避免javascript未使用的保留字陷阱犯规的可能性(请注意 - 我从来没有这样做)。