Question

Pourquoi n'est-il pas de produire quoi que ce soit?

console.log(JSON.stringify(function(){console.log('foobar');}));
Était-ce utile?

La solution

JSON ne peut pas stringify fonctions à tous, il les traite comme undefined ou null des valeurs.Vous pouvez vérifier l'exacte algorithme à EcmaScript 5.1 §15.12.3, voir aussi l' description au MDN.

Cependant, bien sûr, vous pouvez stringify expression de fonction par la coulée de chaînes de caractères, essayez

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

Autres conseils

JSON n'a aucun moyen de représenter une fonction.Il s'agit d'un format de données conçu pour la simplicité et la compatibilité entre les langues (et une fonction est la dernière chose qui sera compatible entre la langue continue).

des docs pour JSON.Stringify :

Si non définie, une fonction ou une valeur XML est rencontrée lors de la conversion, il est soit omis (lorsqu'il est trouvé dans un objet) ou censuré à NULL (lorsqu'il est trouvé dans un tableau).

Vous ne pouvez pas faire cela, mais certaines bibliothèques tierces peuvent vous aider à faire cela, comme: https://www.npmjs.com/package/json-fn

Si vous souhaitez utiliser JSON.stringify aussi convertir les fonctions et les objets natifs, vous pouvez passer un convertisseur de fonction en tant que deuxième argument:

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))

De retour undefined à partir de la fonction convertisseur si vous souhaitez omettre le résultat.

Le troisième paramètre est le nombre d'espaces que vous souhaitez la sortie de tiret (facultatif).

yourFunctionName.toString(); sera également stringify une fonction

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top