関数表現を弦を強化できないのはなぜですか?
-
11-12-2019 - |
質問
なぜこれは何も生み出すのですか?
console.log(JSON.stringify(function(){console.log('foobar');}));
. 解決
JSONは関数をまったく文字列化できません.undefined
またはnull
値と同じように処理します。 ECMAScript 5.1≒15.12.3 また、 mdn 。
しかしあなたはもちろん、それらを文字列にキャストして関数式を文字列化することができます、
.console.log("" + function(){console.log('foobar');})
他のヒント
JSONは関数を表す手段はありません。これは、言語間で単純さと互換性のために設計されたデータフォーマットです(そして関数は最後に相互言語互換性がある最後のものです)。 json.stringify :
変換中に未定義、関数、またはXML値が発生した場合は、省略(オブジェクトに見つかったとき)またはNULLに検閲されます(配列に見つかった場合)。
それをすることはできませんが、サードパーティのライブラリがいくつかあります。
JSON.stringify
を使用して関数とネイティブオブジェクトを変換する場合は、2番目の引数としてコンバータ関数を渡すことができます。
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))
.
結果を省略したい場合は、コンバータ関数からundefined
を返します。
3番目のパラメータは、出力にインデントするスペース数です(オプション)。
yourFunctionName.toString();
は関数をStanpingする
所属していません StackOverflow