为啥 TypeError 上的 JSON.stringify 返回一个空对象 [重复]
Posted
技术标签:
【中文标题】为啥 TypeError 上的 JSON.stringify 返回一个空对象 [重复]【英文标题】:Why does JSON.stringify on TypeError return an empty object [duplicate]为什么 TypeError 上的 JSON.stringify 返回一个空对象 [重复] 【发布时间】:2016-03-21 18:22:09 【问题描述】:我正在使用节点 4.2,我发现一个错误并在其上使用 JSON.stringify。对于大多数对象,这工作正常。但是当抛出 [TypeError: callback is not a function] 时,它会返回一个空对象。如果我直接 console.log 它,它工作正常。
Mozilla 的页面说:
Boolean、Number 和 String 对象在字符串化过程中被转换为相应的原始值,符合传统的转换语义。
try
...
catch (err)
console.log('error: ' + JSON.stringify(err)) // outputs
【问题讨论】:
我认为字符串化一个空对象应该可以工作? 你为什么不直接登录,或者像console.log('error : ', err)
console.log(JSON.stringify(TypeError, null, 2))
给我未定义
你为什么要对错误进行字符串化?只需像@adeneo 建议的那样直接记录即可。
恕我直言,this is 最佳答案,如何对 Error 对象进行字符串化。
【参考方案1】:
当您在 TypeError 上使用 stringify
时,您正在对没有 enumerable
属性的对象进行字符串化。
如果你这样做了
var typeError = new TypeError("hey")
for(var prop in typeError)
console.log(prop) // this does not run
当您使用console.log
登录时,您使用的是valueOf
,所以
var typeError = new TypeError("hey")
typeError.valueOf() // TypeError: hey(…)
另外,错误知道如何将自己变成一个字符串,所以这也可以:
var typeError = new TypeError("hey")
typeError.toString() // "TypeError: hey"
如果您想记录使用普通日志看不到的对象的属性,您可以console.dir
该对象。
当您在typeError
上执行此操作时,您会看到它有一个message
属性:
【讨论】:
以上是关于为啥 TypeError 上的 JSON.stringify 返回一个空对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: this.props.sendKitchen 不是一个函数……为啥?