2012-09-29 20 views

Odpowiedz

21

JSON nie może stringify funkcje w ogóle, to zajmuje im tak jak undefined lub null wartości. Dokładny algorytm można sprawdzić pod numerem EcmaScript 5.1 §15.12.3, patrz także description at MDN.

jakkolwiek oczywiście mogą stringify wyrażenie funkcyjne, oddając je na sznurku, spróbuj

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

Witam Bergi, przekazałem funkcję odlewania do mojego pracownika sieci, jednak jak mogę przywrócić z powrotem do js? JSON.parse? –

+0

@TedFitzpatrick 'eval'. Oczywiście działa tylko dla funkcji bez zmiennych wolnych. – Bergi

+0

Dzięki Bergi. Przekazuję wyrażenie funkcji konstruktora, które samo ma wewnętrzne instrukcje funkcyjne. Kiedy I eval() otrzymuję "nieoczekiwany token" (". Próbowałem usunąć otaczający blok" function() {} ", ale nadal otrzymuję błąd ... czy ciągi eval'd zawierają funkcje? –

4

JSON nie ma możliwości, aby reprezentować funkcję. Jest to format danych zaprojektowany pod kątem prostoty i kompatybilności w różnych językach (a funkcja jest ostatnią rzeczą, która będzie kompatybilna z wieloma językami).

Od docs dla JSON.stringify:

Jeśli niezdefiniowana, funkcja lub wartość XML napotkano podczas konwersji jest albo pominięty (gdy znajduje się w obiekcie) lub ocenzurowana null (jeśli go znajduje się w tablicy).