为什么不能将函数表达式字符串化?
-
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(在阵列中找到时)。
你不能这样做,但是有一些第三方库可以帮助你这样做,如: https://www.npmjs.com/package/json-fn
如果要使用JSON.stringify
还可以转换函数和本机对象,您可以将转换器功能传递为第二个参数:
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))
.
如果要省略结果,请从转换器功能返回生成扫描码。
第三个参数是您希望输出缩进的空格(可选)。
yourFunctionName.toString();
还将串行函数
不隶属于 StackOverflow