可能重复:
Is Chrome’s JavaScript console lazy about evaluating arrays?
基本上我发现谷歌浏览器的开发工具存在问题。
以此代码段为例:
console.log($(this).find(' .buttons .cancel'));
$(this).find(' .buttons .cancel').remove();
当触发该代码段时,如果有两个项目与这些选择器匹配,则谷歌浏览器输出[, ]
。基本上它是找到元素,但它在显示数据时似乎比它应该更慢。
我希望能够记录我要删除的项目,但就目前而言,我必须首先运行它而不使用.remove()
行。然后在我知道它工作之后我可以使用remove()
函数再次运行它。
答案 0 :(得分:2)
考虑以下测试:
a={a:'a'}
。它返回一个对象。a.a='b'
a: "b"
因此,对象始终以Chrome浏览器控制台中首次打开时的状态显示。对于(伪)数组,重要的是控制台到达时的对象状态。这可能是在正常的javascript返回之后(很难说明原因。可能是性能原因)。
您可以通过始终记录不更改的元素来处理此问题,例如:
console.log("hello")
console.log($(this).find(".buttons .cancel").clone())
如果不能选择记录不可变对象,则仍可以在跟踪代码时进行记录:console.log(document); debugger;
答案 1 :(得分:1)
如果您将对象传递给Google Chrome的console.log()
,该对象不是字符串或数字等原始值,则不会立即输出该对象的内容。可能由于某些进程间通信,实际从对象获取数据并输出到控制台有一些延迟。如果您立即修改同一个对象,这将导致问题,因为您不一定会在控制台中显示正确的内容。
一种解决方法是仅将完成的字符串传递给console.log()
。因为字符串是不可变的,所以它们永远不会被其他任何东西改变,所以你不会被console.log()
欺骗。
在您的情况下,您将删除下一行代码中的DOM元素。由于Chrome的计时怪异,这会删除DOM元素,console.log()
实际上可以看到它们是什么并输出它们。你可以这样做,而不是立即显示字符串并将该字符串传递给console.log()
:
console.log($(this).find(' .buttons .cancel').toString());