2017-01-02 39 views
1

我在寫數組中的函數時遇到了問題。js中的數組中的函數爲null

這裏是發生了什麼:

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

你如何期待一個函數被序列化爲JSON? – Phil

+0

這不是JSON,如果我需要()它作爲一個JS文件,對不對?它仍然是一個JS對象 –

+1

只要您通過JSON.stringify'(成功)傳遞它,** **就是** JSON。 – Phil

回答

4

不能在JSON序列化的功能。來自MDN:

如果未定義,在轉換過程中遇到函數或符號,它會被省略(當它在對象中找到時)或被檢查爲null(當它在數組中找到時)。 JSON.stringify也可以在傳遞「純」值(如JSON.stringify(function(){})或JSON.stringify(undefined)時返回undefined。

source

我會質疑存儲JSON這樣的配置,但如果你真的需要,你可以考慮像serialize-javascript將處理功能的系列化。