console.log打印PdfViewerApplication对象与其eventBus字段值不一致问题
问题成因
这是Chrome、Firefox等主流浏览器控制台console.log的懒求值特性导致的,属于正常的设计逻辑,不是代码bug:
- 打印完整引用类型(对象、数组等)时,控制台不会立即存储该对象所有属性的当前值,只会保存指向内存中该对象的引用。折叠状态下展示的是打印瞬间的属性快照,但你手动点击展开对象时,控制台会重新从内存中读取该对象的最新属性值再渲染。
- 打印基础类型值(包括
null、undefined、字符串、数字等)时,控制台会直接存储打印瞬间的取值,后续不会更新。
对应场景的执行时序
- 执行
console.log(PdfViewerApplication)时,eventBus字段确实为null,控制台记录对象引用,折叠预览也显示当时的快照 - 紧接着执行
console.log(PdfViewerApplication.eventBus),直接输出当前值null - 两次打印完成后,后续业务逻辑完成了
eventBus的初始化赋值,还绑定了pagesloaded事件监听器 - 手动点开第一次打印的完整对象时,控制台读取当前最新的对象属性,就展示了已经赋值完成的
eventBus内容,和之前的打印结果出现差异
验证方案
如果需要打印对象当前时刻的完整快照,避免懒求值干扰,可以使用以下方式:
- 对于可序列化的属性,使用
console.log(JSON.parse(JSON.stringify(PdfViewerApplication))) - 现代浏览器可直接使用结构化克隆方法:
console.log(structuredClone(PdfViewerApplication))
内容的提问来源于stack exchange,提问作者diesel94
相关产品推荐
相关产品推荐

