В чем разница между {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
для имени (бит перед двоеточием).