Есть ли разница между
obj = {'foo': 'bar'}
а также
obj = {foo: 'bar'}
Я заметил, что вы не можете использовать -
в ключе, когда я не использую кавычки. Но действительно ли это имеет значение? Если да, то какой?
Есть ли разница между
obj = {'foo': 'bar'}
а также
obj = {foo: 'bar'}
Я заметил, что вы не можете использовать -
в ключе, когда я не использую кавычки. Но действительно ли это имеет значение? Если да, то какой?
Нет, кавычки не имеют значения (если, как вы заметили, вы не хотите использовать ключ, который не является допустимым идентификатором JavaScript).
Как примечание: формат обмена данными JSON требует двойных кавычек вокруг идентификаторов (и не допускает одинарные кавычки).
Из Некотируемые имена свойств/объектные ключи в JavaScript, моя запись по теме:
Цитаты могут быть опущены только в том случае, если имя свойства является числовым литералом или допустимым именем идентификатора.
[...]
Обозначение скобок можно безопасно использовать для всех имен свойств.
[...]
Точечная нотация может использоваться только тогда, когда имя свойства является допустимым именем идентификатора.
Обратите внимание, что зарезервированные слова разрешены для использования в качестве имен некотируемых свойств в ES5. Однако, для обратной совместимости с ES3, Id предлагает процитировать их в любом случае.
Я также создал инструмент, который расскажет вам, можно ли использовать любое имя свойства без кавычек и/или с точечной нотацией. Попробуйте в mothereff.in/js-properties.
Здесь нет никакой разницы. Просто вопрос стиля. Одной из причин для этого является возможность использовать "супер" или "класс" в качестве ключа, поскольку это зарезервированные ключевые слова.
У некоторых людей может возникнуть соблазн передать строку с пробелом, а затем вызвать o ['Я могу иметь пробелы'] Но я бы назвал эту плохую практику.
Нет, а не javascript. Однако некоторые синтаксические анализаторы JSON не сработают, если котировки вокруг клавиш отсутствуют.
Есть ситуации, когда они разные. Например, если вы используете jQuery, и вы делаете список параметров для передачи при вызове команды jQuery $() для создания элемента, цитируемые слова превращаются в параметры, а не кавычки слова превращаются в функции. Например, "размер" будет устанавливать атрибут размера объекта, а размер (без кавычек) вызовет функцию size() объекта. См. jQuery(), внизу:
В то время как второй аргумент удобен, его гибкость может привести к непреднамеренным последствиям (например, $( "
<input>
", {size: "4" }), вызывающим метод .size() вместо установки атрибута size). Таким образом, предыдущий блок кода можно было бы записать следующим образом:
Отличия:
Доступ к объекту: object.member
Доступ к члену карты: object [member]