javascript - 当 toString 或 valueOf 都不返回堆栈时,console.log 如何获取错误堆栈?
问题描述
(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'
显然,console.log
正在获取堆栈。
Error.prototype.toString = () => 'toString';
Error.prototype.valueOf = () => 'valueOf';
const err = new Error('test');
err.stack = 'stack';
console.log(err); // Prints 'stack'
为什么会console.log
得到堆栈?一个相关的问题是,为什么不Error.prototype.toString
返回堆栈?console.log
以不同方式处理Error
对象似乎是一个复杂的设计。
另外,这样的东西是否记录在某处?它似乎不在这里:https ://console.spec.whatwg.org/
解决方案
每个浏览器都以不同的方式实现 console.log。例如,console.log(new Error('test'))
在 Safari 中打印undefined
;所以这真的取决于浏览器供应商他们想要如何实现它。
但是,该Error
对象实现了一个toString
属于 ECMAScript 规范的方法,因此浏览器必须遵守该规范:https ://www.ecma-international.org/ecma-262/5.1/#sec-15.11.4.4
推荐阅读
- android - Android app productFlavor versionCode OpenGL ES
- javascript - 传单地图:使用坐标数组绘制的中断路线,如果数组值为 0
- snowflake-cloud-data-platform - 雪花:外部应用/横向
- kotlin - 如何将视图边距绑定到视图模型字符串实时数据?
- angular - 如何在 Angular FontAwesone 中正确堆叠 fa 图标
- algorithm - 平均情况下 nlogn 螺母和螺栓匹配
- python - 如何使用 python 将多个文本文件中的整数加到一个新的文本文件中?
- solidity - Chainlink 上的 VRF 协调器合约是什么?
- google-cloud-platform - 什么问题导致 Google AI Platform 视频批量预测无法处理输入文件
- android - 使用 PIN 码的 Google TV Casting