Javascript console.log如何获得错误';当toString或valueOf都不返回堆栈时,s堆栈?

Javascript console.log如何获得错误';当toString或valueOf都不返回堆栈时,s堆栈?,javascript,Javascript,为什么console.log获取堆栈?一个相关的问题是,Error.prototype.toString为什么不返回堆栈?它似乎是一个复杂的设计,以不同的方式处理console.logError对象 还有,像这样的东西有没有记录在案?它似乎不在这里:每个浏览器实现console.log的方式不同。例如,Safari中的console.log(新错误('test'))打印未定义的;因此,如何实现它实际上取决于浏览器供应商 但是,Error对象实现了作为ECMAScript规范一部分的toStrin

为什么
console.log
获取堆栈?一个相关的问题是,
Error.prototype.toString
为什么不返回堆栈?它似乎是一个复杂的设计,以不同的方式处理
console.log
Error对象


还有,像这样的东西有没有记录在案?它似乎不在这里:

每个浏览器实现console.log的方式不同。例如,Safari中的
console.log(新错误('test'))
打印未定义的
;因此,如何实现它实际上取决于浏览器供应商


但是,
Error
对象实现了作为ECMAScript规范一部分的
toString
方法,因此浏览器必须遵守该规范:

每个浏览器以不同的方式实现console.log。例如,Safari中的
console.log(新错误('test'))
打印未定义的
;因此,如何实现它实际上取决于浏览器供应商


然而,
Error
对象实现了一个属于ECMAScript规范的
toString
方法,因此浏览器必须遵守该规范:

对于任何考虑编辑此问题的人,值得注意的是,尽管我在Chrome控制台中看到了指定的行为,在使用堆栈代码段时,它实际上不会被复制。对于任何考虑编辑此问题的人来说,值得注意的是,尽管我在Chrome控制台中看到了指定的行为,但在使用堆栈代码段时,它实际上不会被复制。
(new Error('test')).toString() // 'Error: test'

(new Error('test')).valueOf() // Error('test')

(new Error('test')).stack // 'Error: test\n at <anonymous>:1:2'

console.log(new Error('test')) // Prints 'Error: test\n at <anonymous>:1:2'
Error.prototype.toString = () => 'toString';
Error.prototype.valueOf = () => 'valueOf';
const err = new Error('test');
err.stack = 'stack';

console.log(err); // Prints 'stack'