может JSON сериализовать массив, который использует * functions * в качестве ключей? - PullRequest
0 голосов
/ 07 мая 2009

Я увлекаюсь лингвистическим проектом Javascript. Я хотел бы построить его, используя объекты для представления Существительных и функций для хранения Глаголов, поскольку это делает концептуализацию моего проекта менее сложной. Я использую функции в качестве ключей к объекту (я написал пример ниже). Будет ли возможность сериализовать это с JSON, когда придет время сохранять данные.

function verbFn() {
   //do something
}

var nouns = {};

nouns[verbFn] = 'some value';

В этом примере JSON сможет сериализовать "существительные"?


Э-э ... после размышлений над моим первоначальным вопросом и прочтения комментариев я пришел к выводу, что пытаться делать что-то таким образом просто очень неправильно и глупо.

Ответы [ 5 ]

4 голосов
/ 07 мая 2009

Нет, JSON не может этого сделать. Ключи должны быть в двойных кавычках.

Также похоже, что вы на самом деле не используете функцию в качестве ключа - она ​​преобразуется в строку:

<script>

var x = {};
x[window.open] = true;

for (var i in x)
    alert(typeof i + '\n' + i); // typeof i == string

</script>
2 голосов
/ 07 мая 2009

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

1 голос
/ 07 мая 2009

вы на самом деле не используете функции в качестве ключей - вы используете строковое преобразование функции в качестве ключа, что также неявно полагается на уникальность этих строковых представлений. Для платформ, которые поддерживают декомпиляцию функций, это работает нормально, но теоретически могут быть реализации, которые просто возвращают «[function]», что было бы довольно плохо в вашем случае.

0 голосов
/ 07 мая 2009

JSON - это синтаксис структуры данных. Функция не является данными, поэтому ее нельзя сериализовать как часть структуры данных (ключ или иначе). Независимо от языка, реализации или чего-либо еще.

0 голосов
/ 07 мая 2009

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

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

...