Perché non riesci a stringere un'espressione di funzione?
-
11-12-2019 - |
Domanda
Perché questo non produce nulla?
console.log(JSON.stringify(function(){console.log('foobar');}));
. Soluzione
JSON non può stringere le funzioni, le gestisce proprio come i valori undefined
o null
.Puoi controllare l'algoritmo esatto a ecmascript 5.1 §15.12.3 , vedi anche il Descrizione su MDN .
Altri suggerimenti
JSON non ha alcun modo per rappresentare una funzione.È un formato di dati progettato per semplicità e compatibilità attraverso le lingue (e una funzione è l'ultima cosa che sarà compatibile con il linguaggio cross-linguistico).
Dai documenti per json.Stringify :
.Se non definito, una funzione o un valore XML viene riscontrato durante la conversione è omesso (quando viene trovato in un oggetto) o censurato a null (quando viene trovato in un array).
Non puoi farlo, ma ci sono alcune librerie di terze parti possono aiutarti a farlo, come: https://www.npmjs.com/package/json-fn
Se si desidera utilizzare JSON.stringify
per convertire anche funzioni e oggetti nativi è possibile passare una funzione di convertitore come secondo argomento:
const data = {
fn: function(){}
}
function converter(key, val) {
if (val && typeof val === 'function' || val.constructor === RegExp) {
return String(val)
}
return val
}
console.log(JSON.stringify(data, converter, 2))
.
Ritorna undefined
dalla funzione Convertitore se si desidera omettere il risultato.
Il terzo parametro è il numero di spazi che si desidera l'uscita da indentazione (opzionale).
yourFunctionName.toString();
stringerà anche una funzione