为什么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.loglogging时,你使用的是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属性:

在这里输入图像描述