В чем разница между {active: "yes" } и { "active": "yes" }?

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

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

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

Ответ 1

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

Кроме того, спецификация JSON требует, чтобы у них были кавычки вокруг них:

Строка начинается и заканчивается с помощью кавычки

Итак, {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"

Ответ 2

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

Последний недействителен JSON (цитируемые имена обязательны для JSON).

Ответ 3

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

JSON ⊂ JavaScript

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

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

Ответ 4

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

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

Ответ 5

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