尝试使用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);
'{}'
Run Code Online (Sandbox Code Playgroud)
问题是我最终得到一个空对象.
浏览器
我首先尝试离开node.js并在各种浏览器中运行它.Chrome版本28给了我相同的结果,有趣的是,Firefox至少做了一次尝试,但遗漏了消息:
>>> JSON.stringify(error); // Firebug, Firefox 23
{"fileName":"debug eval code","lineNumber":1,"stack":"@debug eval code:1\n"}
Run Code Online (Sandbox Code Playgroud)
替换功能
然后我查看了Error.prototype.它表明原型包含诸如toString和toSource之类的方法.知道函数不能被字符串化,我在调用JSON.stringify时包含了一个replacer函数来删除所有函数,但后来意识到它也有一些奇怪的行为:
var error = new Error('simple error message');
JSON.stringify(error, function(key, value) {
console.log(key === ''); // true (?)
console.log(value === error); // true …
Run Code Online (Sandbox Code Playgroud)