为什么这不产生任何东西?
console.log(JSON.stringify(function(){console.log('foobar');}));
答案 0 :(得分:28)
JSON根本无法对函数进行字符串化,它会像undefined
或null
值一样处理它们。您可以在EcmaScript 5.1 §15.12.3查看确切的算法,另请参阅description at MDN。
但是,您当然可以通过将函数表达式转换为字符串来对其进行字符串化,请尝试
console.log("" + function(){console.log('foobar');})
答案 1 :(得分:5)
JSON无法表示函数。它是一种数据格式,旨在简化和跨语言兼容(而且函数是最后一种跨语言兼容的东西)。
来自JSON.stringify的文档:
如果在转换过程中遇到未定义,函数或XML值,则将其省略(在对象中找到它)或删除为null(在数组中找到它时)。
答案 2 :(得分:1)
你不能这样做,但是有一些第三方图书馆可以帮助你做到这一点,例如:https://www.npmjs.com/package/json-fn
答案 3 :(得分:0)
yourFunctionName.toString();
还将对函数进行字符串化
答案 4 :(得分:0)
如果您还想使用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))
如果要忽略结果,请从转换器函数返回undefined
。
第三个参数是您希望输出缩进多少空格(可选)。