为什么不能对函数表达式进行字符串化?

时间:2012-09-29 10:35:44

标签: javascript json function stringification

为什么这不产生任何东西?

console.log(JSON.stringify(function(){console.log('foobar');}));

5 个答案:

答案 0 :(得分:28)

JSON根本无法对函数进行字符串化,它会像undefinednull值一样处理它们。您可以在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

第三个参数是您希望输出缩进多少空格(可选)。