Ответы:
Нет, кавычки не имеют значения (если, как вы заметили, вы не хотите использовать ключ, который не является допустимым идентификатором JavaScript).
В качестве примечания, то формат обмена данными JSON действительно требуют двойные кавычки идентификаторы (и не не позволяет одинарные кавычки).
Из Uncooted имен свойств / ключей объектов в JavaScript моя статья по теме:
Кавычки могут быть опущены, только если имя свойства является числовым литералом или допустимым именем идентификатора .
[...]
Обозначение в скобках можно смело использовать для всех названий свойств.
[...]
Точечная нотация может использоваться только тогда, когда имя свойства является допустимым именем идентификатора.
Обратите внимание, что зарезервированные слова могут быть использованы в качестве имен свойств без кавычек в ES5. Однако, для обратной совместимости с ES3, я бы все равно предложил их процитировать.
Я также создал инструмент, который сообщит вам, можно ли использовать любое заданное имя свойства без кавычек и / или с точечной нотацией. Попробуйте это по адресу mothereff.in/js-properties .
Здесь нет никакой разницы. Просто вопрос стиля. Одной из причин для этого является возможность использовать «super» или «class» в качестве ключа, поскольку это зарезервированные ключевые слова.
У некоторых людей может возникнуть искушение передать строку с пробелом, а затем вызвать o [«У меня может быть пробел»]. Но я бы назвал это плохой практикой.
Нет, не в javascript. Однако некоторые синтаксические анализаторы JSON не будут работать, если кавычки вокруг ключей отсутствуют.
Есть ситуации, когда они разные. Например, если вы используете jQuery и создаете список параметров для передачи при вызове команды jQuery $ () для создания элемента, слова в кавычках превращаются в параметры, а слова в кавычках превращаются в функции. Например, «size» установит атрибут размера объекта, а size (без кавычек) вызовет функцию size () для объекта. Смотрите jQuery () , внизу:
Хотя второй аргумент удобен, его гибкость может привести к непредвиденным последствиям (например, $ ("
<input>", {size: "4"}), вызывающему метод .size () вместо установки атрибута размера). Таким образом, предыдущий блок кода может быть записан как:
obj = { 12e34: true };не то же самое, чтоobj = { '12e34': true };. Первый из них потребует от вас доступа к собственности черезobj['1.2e+35'], в то время как для второго вы будете использоватьobj['12e34']. Смотрите мой ответ для более подробной информации.