为了账号安全,请及时绑定邮箱和手机立即绑定

使用JSON.strgify无法对错误进行字符串化吗?

使用JSON.strgify无法对错误进行字符串化吗?

慕无忌1623718 2019-07-27 15:15:14
使用JSON.strgify无法对错误进行字符串化吗?再现问题在试图使用web套接字传递错误消息时,我遇到了一个问题。我可以复制我所面临的问题JSON.stringify为迎合更广泛的观众:// node v0.10.15> var error = new Error('simple error message');     undefined> error    [Error: simple error message]> Object.getOwnPropertyNames(error);     [ 'stack', 'arguments', 'type', 'message' ]> JSON.stringify(error);     '{}'问题是,我最终得到了一个空对象。我试过的浏览器我首先尝试离开node.js并在各种浏览器中运行它。ChromeVersion 28给了我同样的结果,有趣的是,Firefox至少尝试了一下,但忽略了这个信息:>>> JSON.stringify(error); // Firebug, Firefox 23{"fileName":"debug eval code","lineNumber":1,"stack":"@debug eval code:1\n"}替换函数然后我看了看错误原型..它显示了原型包含的方法,如托斯特林和到源..我知道函数不能被压缩,所以我包括了一个替换函数当调用JSON.strgify来删除所有函数时,却意识到它也有一些奇怪的行为:var error = new Error('simple error message');JSON.stringify(error, function(key, value) {     console.log(key === ''); // true (?)     console.log(value === error); // true (?)});它似乎不像通常那样在对象上循环,因此我无法检查键是否是函数而忽略它。问题是否有任何方法将本机错误消息压缩为JSON.stringify?如果没有,为什么会发生这种行为?绕过这件事的方法坚持使用简单的基于字符串的错误消息,或者创建个人错误对象,而不依赖于本机错误对象。拉力特性:JSON.stringify({ message: error.message, stack: error.stack })
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

修改乔纳森的好答案以避免猴子打补丁:

var stringifyError = function(err, filter, space) {
  var plainObject = {};
  Object.getOwnPropertyNames(err).forEach(function(key) {
    plainObject[key] = err[key];
  });
  return JSON.stringify(plainObject, filter, space);};var error = new Error('testing');error.detail = 'foo bar';console.log(stringifyError(error, null, '\t'));



查看完整回答
反对 回复 2019-07-28
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

因为没有人在谈论为什么一部分,我来接。

为什么这样JSON.stringify返回空对象?

> JSON.stringify(error);'{}'

回答

从…的文件JSON.strgify(),

对于所有其他对象实例(包括Map、Set、WeakMap和WeakSet),只有它们的可枚举属性才会被序列化。

Error对象没有可枚举的属性,这就是它打印空对象的原因。




查看完整回答
反对 回复 2019-07-28
  • 3 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信