может ли JSON сериализовать массив, который использует * функции * в качестве ключей?
-
08-07-2019 - |
Вопрос
Я занимаюсь лингвистическим проектом Javascript.Я бы хотел создать его, используя объекты для представления существительных и функции для хранения глаголов, поскольку это облегчает концептуализацию моего проекта.Я использую функции в качестве ключей к объекту (я написал пример ниже).Можно ли будет сериализовать это с помощью JSON, когда придет время сохранять данные?
function verbFn() {
//do something
}
var nouns = {};
nouns[verbFn] = 'some value';
В этом примере сможет ли JSON сериализовать "существительные"?
Эээ...поразмыслив над своим первоначальным вопросом и прочитав комментарии, я пришел к выводу, что пытаться делать что-то таким образом просто очень неправильно и глупо.
Решение
НЕТ, JSON я не могу этого сделать.Ключи должны быть строками, заключенными в двойные кавычки.
Также похоже, что вы на самом деле не используете функцию в качестве ключа - она преобразуется в строку:
<script>
var x = {};
x[window.open] = true;
for (var i in x)
alert(typeof i + '\n' + i); // typeof i == string
</script>
Другие советы
Согласно стандартам нет, вы не можете. Ключ должен быть строкой
вы на самом деле не используете функции в качестве ключей - вы используете строковое преобразование функции в качестве ключа, что также неявно полагается на уникальность этих строковых представлений. Для платформ, которые поддерживают декомпиляцию функций, это работает нормально, но теоретически могут быть реализации, которые просто возвращают «[функцию]» что было бы довольно плохо в вашем случае. Р>
JSON - это синтаксис структуры данных. Функция не является данными, поэтому ее нельзя сериализовать как часть структуры данных (ключ или иначе). Независимо от языка, реализации или чего-либо еще.
Нет, ключи всегда должны быть строками и ничем иным. См. стандартное описание .
И существительные
- это не массив, это карта, хеш-таблица, ассоциативный массив и «объект», один из них, какое бы имя вы ни выбрали.