为什么google chromes控制台延迟了?

可能重复:
Chrome的JavaScript控制台是否懒于评估数组?

基本上我发现谷歌浏览器的开发人员工具存在问题。

以此片段为例:

console.log($(this).find(' .buttons .cancel')); $(this).find(' .buttons .cancel').remove(); 

当触发该代码段时,如果有两个项目与这些选择器匹配,则谷歌浏览器输出[, ] 。 基本上它是找到元素,但它在显示数据时似乎比它应该更慢。

我希望能够记录我要删除的项目,但是就目前而言我必须先运行它而不使用.remove()行。 然后我知道它工作后我可以使用remove()函数再次运行它。

考虑以下测试:

  • a={a:'a'} 。 它返回一个对象。
  • aa='b'
  • 从第一个命令扩展返回。 它显示a: "b"

因此,对象始终以其在Chrome开发人员控制台中首次打开时所处的状态显示。 对于(伪)数组,重要的是控制台到达时的对象状态。 这可能是在正常的javascript返回之后(很难说明原因。或许是性能原因)。

您可以通过始终记录不更改的元素来处理此问题,例如:

  • 原始值: console.log("hello")
  • DOM节点或jQuery对象的克隆: console.log($(this).find(".buttons .cancel").clone())

如果不能选择记录不可变对象,则仍可以在跟踪代码时进行日志记录: console.log(document); debugger; console.log(document); debugger;

如果您将对象传递给Google Chrome的console.log() ,该对象不是字符串或数字等原始值,则不会立即输出该对象的内容。 可能由于某些进程间通信,实际从对象获取数据并输出到控制台有一些延迟。 如果您立即修改同一个对象,这将导致问题,因为您不一定会在控制台中显示正确的内容。

一种解决方法是仅将完成的字符串传递给console.log() 。 由于字符串是不可变的,因此它们永远不会被其他任何东西改变,所以你不会被console.log()欺骗。

在您的情况下,您将删除下一行代码中的DOM元素。 由于Chrome的计时怪异,这将删除DOM元素,然后console.log()才能真正看到它们是什么并输出它们。 您可以执行类似这样的操作,立即生成显示的字符串并将该字符串传递给console.log()

 console.log($(this).find(' .buttons .cancel').toString());