如何解决为什么 console.dir 在 Error 对象上输出堆栈跟踪?
今天我遇到了一些在调试时真的让我陷入循环的行为,因为一开始我真的不明白我在看什么。经过大量的反复试验,我了解到 console.dir
对 Error
对象有一些不寻常的行为,我想更好地理解它。
如果您打开 Chrome 开发者控制台并运行 console.dir({a: 1,b: 2})
,您将看到一个可展开的对象,如下所示:
展开下拉菜单会按预期显示属性 a
和 b
以及它们的值。在 Promise 上,结果是相似的,但值得注意的是单词 Object
被替换为 Promise
:
注意现在它打印了一个堆栈跟踪。如果您一无所知,您会认为您刚刚打印了一个字符串,并且您可能希望下拉箭头向您显示堆栈跟踪的更多行。当然,下拉菜单会显示对象的属性。
但是请注意,toString
给出了其他东西,它给出了消息但没有堆栈。如果您展开下拉菜单,您会看到以下属性:
所以看起来 console.dir
正在打印错误的 stack
属性。但是为什么?如果 error.toString()
打印 message
属性,那么为什么 console.dir
而是显示 stack
属性的值,这当然只存在于 Error 对象上? console.dir
是否经过硬编码以区别对待其他对象类的错误?
同样,Promise().resolve().toString()
给出 [object Promise]
-- 那么当您在 Promise 上运行 console.dir
时,Promise
从哪里获取 console.dir
字符串?这里的行为不清楚,我觉得如果我更清楚地了解这种行为,我可能会了解某物的内部结构。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。