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はデータ構造の構文です。関数はデータではないため、データ構造(キーなど)の一部としてシリアル化する方法はありません。言語、実装、その他に関係なく。
いいえ、キーは常に文字列であり、他のものはありません。 標準の説明を参照してください。
および名詞
は配列ではなく、マップ、ハッシュテーブル、連想配列、「オブジェクト」、これらのいずれか、任意の名前です。