В чем разница между {active: "yes"} и {"active": "yes"}? - PullRequest
10 голосов
/ 22 октября 2010

Я использовал FireBug для тестирования двух случаев, и они кажутся довольно похожими по результату:

>>> var x = {"active": "yes"}
>>> x.active
"yes"
>>> var x = {active: "yes"}
>>> x.active
"yes"

Но я почти уверен, что между этими двумя есть какая-то разница, может быть, даже разница в производительности. Итог - я хотел бы знать, есть ли разница между {active: "yes"} и {"active": "yes"}.

Ответы [ 5 ]

28 голосов
/ 22 октября 2010

Оба действительны.Однако есть некоторые ключевые слова, которые вы не можете использовать, например delete, поэтому, чтобы не заключать их в кавычки, чтобы они не обрабатывались буквально синтаксическим анализатором ECMAScript, а вместо этого явно указывались как строки.

Кроме того, JSON spec требует, чтобы ключи имели кавычки вокруг них:

Строка начиналась и заканчивалась
кавычками

Так что {key:'value'} - этонедопустимо JSON, но допустимо JS, в то время как {"key":"value"} допустимо JS и JSON.

Примеры ключевых слов и недействительных / неоднозначных ключей:

>>> ({delete:1})
SyntaxError: Unexpected token delete
>>> ({'delete':1})
Object

Другой пример:

>>> ({first-name:'john'})
SyntaxError: Unexpected token -
>>> ({'first-name':'john'})
Object
>>> ({'first-name':'john'})['first-name']
"john"
11 голосов
/ 22 октября 2010

Оба являются допустимыми JavaScript (хотя некоторые имена могут использоваться только в кавычках, active среди них нет).

Последний является недопустимым JSON (имена в кавычках являются обязательными в JSON).

3 голосов
/ 22 октября 2010

Каждый действительный JSON также является допустимым JavaScript, но не каждый действительный JavaScript также является допустимым JSON, поскольку JSON является надлежащим подмножеством JavaScript:

JSON ⊂ JavaScript

JSONтребует, чтобы имена пар имя / значение заключались в кавычки, в то время как JavaScript этого не делает (если они не являются зарезервированными ключевыми словами).

Итак, ваш первый пример {"active": "yes"} - это и допустимый JSON, и допустимый JavaScript, а второйпример {active: "yes"} является допустимым только JavaScript.

2 голосов
/ 22 октября 2010

В JavaScript {"active": "yes"}, {'active': "yes"}, {"active": 'yes'} и {active: 'yes'} одинаковы - если вы используете зарезервированное ключевое слово (как указывает медер), вы должны указатьключ - иначе ключ не нужно заключать в кавычки.

В JSON, с другой стороны, все ключи и значения должны заключаться в кавычки ".
{"active": "yes"} является действительным JSON.
{'active': "yes"}, {"active": 'yes'} и {active: 'yes'} не являются.

0 голосов
/ 22 октября 2010

Если вы используете это для JSON, имя (active) должно быть заключено в кавычки.Он по-прежнему будет работать в JavaScript без него, но технически искажен JSON.
См .: http://json.org/
Обратите внимание, что object требует string для имени (бит перед двоеточием).

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