Литеральный синтаксис объекта, который вы используете is just part of JavaScript's syntax. Вы можете использовать числовой или строковый литерал как имя свойства, а также любое допустимое имя переменной в качестве имени свойства. Обратите внимание, что недопустимые имена переменных должны быть заключены в кавычки, но все равно могут быть именами свойств (числовые литералы являются исключением).
То есть у вас может быть obj = {'"': value}
, т. Е. Цитата, как действительное имя свойства объекта. Однако, если вы остановились на апострофе, это будет синтаксическая ошибка.
Синтаксис имени переменной, например. {nameWithoutQuotes: "value"}
разрешено, насколько я могу судить, для удобства. Он не имеет особого значения и рассматривается как имя свойства строки. Было бы очень странно иметь "
всюду в определении литерала объекта, и это также имеет смысл при использовании аналогичного синтаксиса доступа. Например:
obj = {"with quotes": "q", withoutQuotes: "x"};
obj["with quotes"];
obj.withoutQuotes;
Обратите внимание, что метод доступа с именем свойства, которое требует кавычек также требует кавычек, тогда как, когда кавычки не требуется доступ может быть сделано без них.
Что касается причины, почему "obj" = "string"
не допускается, за исключением того факта, что это недействительный синтаксис, то есть потому, что литерал "obj"
не создает ссылку в памяти, которой можно назначить. Обозначение obj = {}
создает ссылку, которая хранится в obj
, и память выделяется для каждого из ее свойств, как описано в синтаксисе литерала. Вы могли бы сделать подобное заявление о obj = "string";
Он также не может быть стоит ничего, что котировки не могут быть исключены из JSON строки для имен свойств. Многие парсеры этого не допустят.
'var bar = 'foobar';' не может работать в вашем случае? – Raptor
Вот как работает синтаксис. – SLaks
Синтаксис 'obj ['property']' требует этого. –