В чем разница между ключами объектов с кавычками и без кавычек? - PullRequest
190 голосов
/ 03 декабря 2010

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

obj = {'foo': 'bar'} 

и

obj = {foo: 'bar'}

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

Ответы [ 6 ]

126 голосов
/ 03 декабря 2010

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

В качестве примечания, данные JSONформат обмена требует двойные кавычки вокруг идентификаторов.

122 голосов
/ 05 марта 2012

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

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

[…]

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

[…]

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

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

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

Screenshot

9 голосов
/ 03 декабря 2010

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

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

2 голосов
/ 03 декабря 2010

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

1 голос
/ 20 февраля 2015

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

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

0 голосов
/ 11 июля 2016

Отличия:

  1. Без кавычек: Это объект, когда нет кавычек.

Доступ к члену объекта: object.member

  1. Имеет цитату : Это карта, когда есть цитата.

Доступ к элементу карты: объект [элемент]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...