может ли JSON сериализовать массив, который использует * функции * в качестве ключей?

StackOverflow https://stackoverflow.com/questions/834264

  •  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 - это синтаксис структуры данных. Функция не является данными, поэтому ее нельзя сериализовать как часть структуры данных (ключ или иначе). Независимо от языка, реализации или чего-либо еще.

Нет, ключи всегда должны быть строками и ничем иным. См. стандартное описание .

И существительные - это не массив, это карта, хеш-таблица, ассоциативный массив и «объект», один из них, какое бы имя вы ни выбрали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top