Этот вопрос уже имеет ответ здесь:
Я вижу это все время: литералы объектов объявили таким образом, что некоторые ключи окружаются кавычками, и другие не. Пример из 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 Объект представляется, поскольку вводная левая фигурная скобка, сопровождаемая нулем или большим количеством свойств, разделенных с запятыми, согласилась с правой фигурной скобкой. Свойство является заключенной в кавычки Строкой, представляющей ключ или имя свойства, двоеточие и затем stringified значение свойства. Массив представляется, поскольку вводная левая скобка, сопровождаемая нулем или большим количеством значений, разделенных с запятыми, согласилась с правой скобкой.
Однако это относится только к stringification JSON.
Это зарезервированные слова Javascript, и (хотя и не обязательно) синтаксис языка требует, чтобы они были заключены в кавычки.
Строго говоря, чистая нотация «JSON» требует, чтобы были заключены в кавычки все ключевые строки. Однако сам Javascript в порядке с ключами, которые являются действительными идентификаторами (но не зарезервированными словами), без кавычек.
В Javascript есть много зарезервированных слов, которые на самом деле не используются языком, которые, я думаю, были зарезервированы для возможного использования в будущем. класс
является одним из них, хотя Javascript фактически не использует классы. Другой - goto
, и нет никаких шансов, что он когда-либо будет использован. Однако в результате, если вы хотите использовать их в качестве json-ключа, его необходимо указать. Строго говоря, вам, вероятно, следует всегда указывать свои ключи, чтобы избежать возможности попасть в ловушку неиспользуемых зарезервированных слов javascript (заметьте - я никогда не делаю).
для
и класс
- ключевые слова языка. Ваш интерпретатор выдаст SyntaxError, если они не заключены в кавычки.
См. Раздел 7.6.1.1 Спецификации, на которую вы ссылаетесь.
Ключевые слова языка Javascript или зарезервированные ключевые слова являются всегда в кавычках.