Javascript 为什么可以';我不能在chrome控制台中展开此事件对象吗?

Javascript 为什么可以';我不能在chrome控制台中展开此事件对象吗?,javascript,google-chrome,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Devtools,简而言之,我正在控制台中运行以下命令: window.onbeforeunload = function (e) { console.log(e); } P>但是在控制台中,当事件发生时(试图在写一个问题的时候留下“页面”),我看到的是: Event {clipboardData: undefined, cancelBubble: false, returnValue: true, srcElement: document, defaultPrevented: false…} 旁边

简而言之,我正在控制台中运行以下命令:

window.onbeforeunload = function (e) {
    console.log(e);
}
<> P>但是在控制台中,当事件发生时(试图在写一个问题的时候留下“页面”),我看到的是:

Event {clipboardData: undefined, cancelBubble: false, returnValue: true, srcElement: document, defaultPrevented: false…}
旁边有一个小小的“i”图形。当我单击它旁边的箭头以展开控制台中的对象时,什么也没有发生。箭头旋转表示它已展开,但未展开


我在这里遗漏了什么???

这是因为尽管您让控制台在页面更改期间保持不变,但对象不再存在-在您离开页面时它已被销毁。这意味着它不再可供检查,因此单击向下三角形没有帮助

请尝试此操作,以防止页面实际更改:

window.onbeforeunload = function (e) {
    console.log(e);
    return true;
}
现在,页面将提示您如何操作。在弹出的提示中单击“取消”以保留在页面上。现在,您可以根据需要在控制台中检查
事件

区别在于
onbeforeuload
函数现在返回的值不是
null
/
未定义的值。返回值可以是任何值,甚至是
'
false
,等等……除了
null
未定义的
之外的任何值,它仍然会导致页面在导航离开之前提示,从而使您有机会检查事件。请记住,如果没有
return
语句,默认情况下JavaScript函数返回
undefined


每当你无法在Chrome开发工具中检查某个东西时,90%的时间是因为某些操作导致该东西变得不可用……页面从该对象存在时开始移动。

老问题。但这个简单的解决方案对我更有效。使用

function(e) {
  console.dir(e);
}

我刚刚遇到了一个问题,我的API PUT请求在chrome dev tools的控制台选项卡中显示为
cancelled
,我看到了同样的行为,无法展开对象,控制台条目旁边显示了一个小的
I
图标。我决定把这个答案和我的问题联系起来,以防对其他人有所帮助


当检查对象或阵列时,这是一个很好的做法,这些对象或阵列以后可能会更改为放置在

debugger
…在代码中要调试的点之后。这会在此时暂停代码的执行,意味着您肯定知道此时看到的是它的状态,而不是任何后续更改

扩展失败可能意味着对象随后被从内存中删除:可能被删除或垃圾收集,或者(特别是在Node.js脚本上使用Chrome dev工具时)可能是脚本已完成,因此所有引用现在都不指向任何地方


事实上,一个更好的实践是使用
调试器
而不是
控制台.log
,然后在局部变量中查找要检查的内容

window.onbeforeunload = function (e) {
  debugger; // Now go find `e` in the local variables section
}
这样,您就可以访问更多的上下文,而不必担心代码后面发生的事情会对输出造成更改


请始终记住,在JavaScript中,任何时候处理指向对象的变量时,都是在处理指向该对象最新状态的活动引用

console.log
记录引用,而不是对象的内容
,当您查看和展开记录的引用时,您查看的是该引用在查看时指向的内容,而不是记录时指向的内容。如果它已从内存中删除或重新分配,则可能什么都不是

指向字符串和数字的变量指向的是值而不是引用,因此另一个选项可能是记录对象的字符串化版本,如
console.log(JSON.stringify(someObject))
(尽管输出可能更难读取)。
调试器
方法通常更好