Почему некоторые объектно-литературные свойства цитируются, а другие нет?
Я все время вижу это: литералы объектов объявляются такими, что некоторые ключи окружены кавычками, а другие - нет. Пример из 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; все, что я смог найти, - это [Примечание 6 раздела 15.12.3, акцент мой]:
ПРИМЕЧАНИЕ 6 Объект отображается как открытие левой скобки с последующим нулем или больше свойств, разделенных запятыми, закрытыми с правой скобой. свойство - цитированная строка представляя ключ или имя свойства, толстой кишки, а затем стоимость имущества. Массив отображается в качестве открытой левой скобки, за которой следует ноль или более значений, разделенных запятыми, закрытыми правой скобкой.
Однако это относится только к строковому расширению JSON.
Ответы
Ответ 1
Это зарезервированные слова Javascript и (хотя и не очень необходимые), синтаксис языка требует, чтобы они были процитированы.
Строго говоря, чистая запись "JSON" требует, чтобы все "ключевые" строки были процитированы. Однако сам Javascript в порядке с ключами, которые являются достоверными идентификаторами (но не зарезервированными словами), которые не кавычки.
Ответ 2
На этом этапе (два плюс несколько лет) есть причина, чтобы процитировать свойства объектного литерала. Если вы хотите минимизировать свой код с помощью компилятора Closure, им может потребоваться сделать свойства доступными для других исходных файлов. В этом случае они захотят избежать переименования символов компилятором. При цитировании имени свойства компилятор Closure не будет минимизировать (переименовывать) их.
Смотрите: Удаление кода, который вы хотите сохранить
(Это относится как минимум к настройке ADVANCED_OPTIMIZATIONS.)
Ответ 3
Ключевые слова языка Java или зарезервированные ключевые слова всегда окружены кавычками.
Ответ 4
for
и class
являются языковыми ключевыми словами. Ваш интерпретатор будет бросать SyntaxError, если они не кавычки.
См. раздел 7.6.1.1 в спецификации, с которой вы связаны.
Ответ 5
Javascript содержит много зарезервированных слов, которые на самом деле не используются языком, который, как мне кажется, был зарезервирован для возможного использования в будущем. class
является одним из них, хотя Javascript фактически не использует классы. Другим является goto
, и нет абсолютно никаких шансов на то, что он будет использоваться. Результат, однако, заключается в том, что если вы хотите использовать их в качестве json-ключа, тогда он должен быть указан. Строго говоря, вы, вероятно, всегда должны указывать свои ключи, чтобы избежать возможности падения фокуса незанятой зарезервированной ловушки javascript (разумеется - я никогда этого не делаю).