为什么我不能在Chrome控制台中扩展此事件对象?

问题描述 投票:0回答:2
简化,我正在做的是在控制台中运行此操作:

window.onbeforeunload = function (e) { console.log(e); }
在游戏机中,当事件发射时(在编写SO问题的过程中尝试“离开页面”)我看到的是:

Event {clipboardData: undefined, cancelBubble: false, returnValue: true, srcElement: document, defaultPrevented: false…}
在旁边有一点“ I”图形。当我单击其旁边的箭头以展开控制台中的对象时,什么也不会发生。箭头变为表明它已经扩展了,但没有扩展。

我在这里错过了什么?

发生这种情况,因为尽管您要让控制台持续在页面上更改,但

视行为不再存在 - 当您离开页面时,它被破坏了。这意味着它根本无法进行检查,因此单击“向下三角形”无济于事。

尝试一下,以防止页面实际变化:
javascript google-chrome google-chrome-devtools
2个回答
42
投票
window.onbeforeunload = function (e) { console.log(e); return true; }

现在,该页面将提示您该怎么办。在出现的提示中单击“取消”以保留在页面上。现在,您可以根据需要检查控制台中的Event

区别在于

onbeforeunload
函数现在正在返回一个不是
null

/

undefined
的值。返回值可能是任何东西,甚至是

''

false
等...除了
null
undefined
之外,它仍然会导致页面提示,然后再导航,从而使您有机会检查活动。请记住,如果没有
return
语句,javaScript函数默认返回
undefined
当您无法检查Chrome Dev工具中的某些内容时,有90%的时间是因为某些动作使该事物变得不可用...页面已经从该对象存在的时候开始了。
    
未能扩展可能意味着该对象随后从内存中删除:可能已删除或收集垃圾,或者(尤其是如果您在Node.js脚本上使用Chrome Dev Tools.js脚本)可能是脚本完成的,所以
all
refs现在无处不在。
当检查物体以后更改为

drop时,这是一个很好的做法,而不是:


7
投票
this暂停了代码的执行,因此您可以确保您知道该变量是什么,而不是看到任何后续更改。

这种方式,您可以访问更多上下文,而不必担心代码后期发生的事情引起的输出的更改。 请记住,在JavaScript中,每当您处理指向对象的变量时,您就会处理该对象的latest

状态。

console.log

记录引用,而不是对象的内容
,当您查看和展开已记录的参考时,您正在查看该引用指向的内容在您查看它的时间
而不是您记录它的时间。如果已将其从内存中删除或重新分配,则可能一无所有。
指向primitives的变量类似于字符串,数字指向值而不是引用,因此您也可以:

删除对象的弦乐版本,例如
window.onbeforeunload = function (e) { debugger; // Now go find `e` in the local variables section }

(尽管该输出可能很难读取)。 如果对象的属性都是原始的 方法是好好。

问题。但是这个简单的解决方案对我来说更好。使用

console.log

我刚刚遇到了一个问题,我遇到了一个问题,我的API提出请求在我的Chrome Dev Tools中的控制台选项卡中显示为console.log(JSON.stringify(someObject)),我看到了相同的行为,我无法扩展对象和小

console.log({ ...someObject })

图标显示在控制台条目旁边。我决定以我的问题链接发布此答案,以防可能对其他人有所帮助。

apiput请求显示为“取消”,带有错误消息typeError:无法获取”

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.