为什么TypeError上的JSON.stringify返回一个空对象
我正在使用节点4.2,并捕捉到一个错误,并使用JSON.stringify。 对于大多数对象,这工作正常。 但是,当引发[TypeError:callback不是函数]时,它返回一个空对象。 如果我console.log直接,它工作正常。
Mozilla的网页上说:
按照传统的转换语义,Boolean,Number和String对象在string化过程中被转换为相应的基本值。
try { ... } catch (err) { console.log('error: ' + JSON.stringify(err)) // outputs {} }
当你在TypeError上使用stringify
的时候,你会把没有enumerable
属性的对象string化。
所以,如果你这样做
var typeError = new TypeError("hey") for(var prop in typeError) { console.log(prop) // this does not run }
当你使用console.log
logging时,你使用的是valueOf
var typeError = new TypeError("hey") typeError.valueOf() // TypeError: hey(…)
此外,一个错误知道如何把自己变成一个string,所以这也是:
var typeError = new TypeError("hey") typeError.toString() // "TypeError: hey"
如果要logging使用普通日志无法看到的对象的属性,可以使用console.dir
对象。
当你在typeError
上做的typeError
,你会看到它有一个message
属性: