В чем разница между объектными ключами с кавычками и без кавычек?

Есть ли разница между

obj = {'foo': 'bar'} 

а также

obj = {foo: 'bar'}

Я заметил, что вы не можете использовать - в ключе, когда я не использую кавычки. Но действительно ли это имеет значение? Если да, то какой?

Ответ 1

Нет, кавычки не имеют значения (если, как вы заметили, вы не хотите использовать ключ, который не является допустимым идентификатором JavaScript).

Как примечание: формат обмена данными JSON требует двойных кавычек вокруг идентификаторов (и не допускает одинарные кавычки).

Ответ 2

Из Некотируемые имена свойств/объектные ключи в JavaScript, моя запись по теме:

Цитаты могут быть опущены только в том случае, если имя свойства является числовым литералом или допустимым именем идентификатора.

[...]

Обозначение скобок можно безопасно использовать для всех имен свойств.

[...]

Точечная нотация может использоваться только тогда, когда имя свойства является допустимым именем идентификатора.

Обратите внимание, что зарезервированные слова разрешены для использования в качестве имен некотируемых свойств в ES5. Однако, для обратной совместимости с ES3, Id предлагает процитировать их в любом случае.

Я также создал инструмент, который расскажет вам, можно ли использовать любое имя свойства без кавычек и/или с точечной нотацией. Попробуйте в mothereff.in/js-properties.

Screenshot

Ответ 3

Здесь нет никакой разницы. Просто вопрос стиля. Одной из причин для этого является возможность использовать "супер" или "класс" в качестве ключа, поскольку это зарезервированные ключевые слова.

У некоторых людей может возникнуть соблазн передать строку с пробелом, а затем вызвать o ['Я могу иметь пробелы'] Но я бы назвал эту плохую практику.

Ответ 4

Нет, а не javascript. Однако некоторые синтаксические анализаторы JSON не сработают, если котировки вокруг клавиш отсутствуют.

Ответ 5

Есть ситуации, когда они разные. Например, если вы используете jQuery, и вы делаете список параметров для передачи при вызове команды jQuery $() для создания элемента, цитируемые слова превращаются в параметры, а не кавычки слова превращаются в функции. Например, "размер" будет устанавливать атрибут размера объекта, а размер (без кавычек) вызовет функцию size() объекта. См. jQuery(), внизу:

В то время как второй аргумент удобен, его гибкость может привести к непреднамеренным последствиям (например, $( "<input>", {size: "4" }), вызывающим метод .size() вместо установки атрибута size). Таким образом, предыдущий блок кода можно было бы записать следующим образом:

Ответ 6

Отличия:

  • Нет цитат: Это объект, когда нет цитаты.

Доступ к объекту: object.member

  1. Процитировать: это карта, когда есть цитата.

Доступ к члену карты: object [member]