В чем разница между объектными ключами с кавычками и без кавычек?
Есть ли разница между
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
- Процитировать: это карта, когда есть цитата.
Доступ к члену карты: object [member]