2012-09-29 15 views

risposta

21

JSON non può stringa i funzioni a tutti, Gestisce loro proprio come undefined o null valori. È possibile controllare l'algoritmo esatto al EcmaScript 5.1 §15.12.3, vedere anche lo description at MDN.

Tuttavia è ovviamente in grado di stringa i espressione di una funzione gettandoli in una stringa, provare

console.log("" + function(){console.log('foobar');}) 
+0

Ciao Bergi, ho passato la mia funzione casted al mio web worker, tuttavia come faccio a riconvertirlo in js? JSON.parse? –

+0

@TedFitzpatrick 'eval'. Ovviamente funziona solo per funzioni senza variabili libere. – Bergi

+0

Grazie Bergi. Sto passando una espressione di funzione di costruzione che ha istruzioni di funzione interne. Quando eval() ricevo un "token imprevisto" ("Ho provato a rimuovere la funzione" circostante() {} ", ma si ottiene comunque l'errore ... le stringhe eval'd possono contenere funzioni? –

4

JSON non ha alcun mezzo per rappresentare una funzione. Si tratta di un formato dati progettato per semplicità e compatibilità tra i linguaggi (e una funzione è l'ultima cosa che sarà compatibile con le lingue diverse).

Dalla documentazione per JSON.stringify:

Se indefinito, una funzione o un valore XML si incontra durante la conversione si sia omesso (quando si trova in un oggetto) o censurato per nulla (quando si trova in una matrice).