Domanda

Mi diletto con un progetto Javascript linguistico. Mi piacerebbe costruirlo usando oggetti per rappresentare nomi e funzioni per archiviare i verbi in quanto ciò rende meno difficile concettualizzare il mio progetto. Sto usando le funzioni come chiavi di un oggetto (ho scritto un esempio di seguito). Sarà possibile serializzare questo con JSON quando arriva il momento di salvare i dati.

function verbFn() {
   //do something
}

var nouns = {};

nouns[verbFn] = 'some value';

In questo esempio, JSON sarà in grado di serializzare " nouns " ;?


Uh ... dopo aver riflettuto sulla mia domanda originale e aver letto i commenti, sono giunto alla conclusione che cercare di fare le cose in questo modo è semplicemente sbagliato e sciocco.

È stato utile?

Soluzione

No, JSON non può farlo. Le chiavi devono essere stringhe tra virgolette doppie.

Inoltre sembra che non stia effettivamente usando la funzione come chiave - viene convertita in una stringa:

<script>

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

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

</script>

Altri suggerimenti

Secondo gli standard no, non puoi. La chiave deve essere una stringa

non stai davvero usando le funzioni come chiavi - stai usando la conversione di stringhe di una funzione come chiave, che si basa implicitamente anche sul fatto che quelle rappresentazioni di stringhe sono uniche. Per le piattaforme che supportano le funzioni di decompilazione funziona bene, ma teoricamente potrebbero esserci implementazioni che restituiscono semplicemente "funzione". che sarebbe piuttosto brutto nel tuo caso.

JSON è una sintassi della struttura dei dati. Una funzione non è un dato, quindi non è possibile serializzarla come parte di una struttura di dati (chiave o altro). Indipendentemente dalla lingua, dall'implementazione o da qualsiasi altra cosa.

No, le chiavi dovrebbero sempre essere stringhe e nient'altro. Vedi la descrizione standard .

E sostantivi non è un array, è una mappa, una tabella hash, un array associativo, " oggetto " ;, uno di quelli, qualunque sia il nome che preferisci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top