请解释为什么在这个简短的例子中,JSON.stringify输出与toString输出不同

时间:2016-03-02 13:05:15

标签: javascript json

这与console.log inconsistent with JSON.stringify类似,但是:我想知道屏幕背后究竟发生了什么,因为我无法理解这里到底发生了什么,以及为什么JSON.stringify()不显示错误文本。这是我的代码(保存在firstio.js中)

var fs = require('fs')

try {
  var file = fs.readFileSync(process.argv[2])
}
catch(error) {
  console.log(error.toString());
  console.log(JSON.stringify(error, null, 2));
  process.exit()
}
console.log(file.toString().split("\n").length - 1)

运行时如下:node firstio.js输出如下:

TypeError: path must be a string
{}

如果JSON.stringify正在转换错误对象,那么toString()显然可以找到的错误文本在哪里?

运行时如下:node firstio.js nonexistingfile输出为:

Error: ENOENT, no such file or directory 'nonexistingfile'
{
  "errno": -2,
  "code": "ENOENT",
  "path": "nonexistingfile",
  "syscall": "open"
}

1 个答案:

答案 0 :(得分:0)

方法JSON.stringify()根据enumarable properties处理对象。

但是window.Error对象没有任何可枚举的属性,因此JSON.stringify(error)只返回空对象。

您可以直接将错误写入控制台:

console.log(new Error('Something happened'));

将输出Error: Something happened

或者您可以编写自己的方法来将字符串化错误;见Is it not possible to stringify an Error using JSON.stringify?