数组中的函数在js中为null

时间:2017-01-02 23:46:43

标签: javascript node.js require

我在编写数组函数时遇到了麻烦。

以下是发生的事情:

config.js

module.exports = {
  transformers: {
    reshape: {
      parser: 'sugarml',
      plugins: [
        // require('reshape-custom-elements')({defaultTag: 'span'})
        function () {
          console.log(arguments)
        }
      ]
    }
  }
}

然后在节点REPL

var config = require('./config.js')

console.log(JSON.stringify(config.transformers, null, 2))

输出

{
  "reshape": {
    "parser": "sugarml",
    "plugins": [
      null
    ]
  },
  "uglify-js": {
    "mangle": {
      "toplevel": true
    }
  },
  "rollup": {
    "format": "es",
    "plugins": {
      "rollup-plugin-node-resolve": {},
      "rollup-plugin-commonjs": {}
    }
  }
}

我很困惑为什么plugins[null]

1 个答案:

答案 0 :(得分:4)

您无法在JSON中序列化函数。来自MDN:

  

如果未定义,在转换过程中遇到函数或符号,则省略(在对象中找到它)或删除为null(在数组中找到它时)。传入时,JSON.stringify也可以返回undefined" pure"值如JSON.stringify(function(){})或JSON.stringify(undefined)。

source

我会质疑在JSON中存储这样的配置,但是如果真的需要,你可以考虑使用serialize-javascript来处理函数序列化的东西。