专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

「篇二」前端常用的10个高级调试方法!

ins518 2024-11-19 05:06:40 技术文章 10 ℃ 0 评论

家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

控制台实用程序(Console Utilities API) API 包含一系列用于执行常见任务的便捷函数,包括:选择和检查 DOM 元素、查询对象、以可读格式显示数据、停止和启动探查器、监视 DOM 事件和函数调用等等。

inspect(object/function)

spect(object/function) 打开并在相应的面板中选择指定的元素或对象,比如:DOM 元素的“元素”面板或 JavaScript 堆对象的“配置文件”面板。

以下示例在“元素”面板中打开 document.body:

inspect(document.body);

当传递一个函数进行检查时,该函数会在“Source”面板中打开文档供检查。

getEventListeners(object)

getEventListeners(object) 返回在指定对象上注册的事件侦听器。 返回值是一个对象,其中包含每个注册事件类型(例如单击或按键)的数组。 每个数组的成员都是描述为每种类型注册的侦听器的对象。 例如,以下列出了在文档对象上注册的所有事件侦听器:

getEventListeners(document);

如果在指定对象上注册了多个侦听器,则该数组包含每个侦听器的所有成员。在以下示例中,在document元素上注册了两个用于单击事件的事件侦听器:

keys(object)

keys(object) 返回一个数组,其中包含属于指定对象的属性名称。要获取相同属性的关联值,请使用 values()。 例如,假设应用程序定义了以下对象:

let player = {
    "name": "Parzival",
    "number": 1,
    "state": "ready",
    "easterEggs": 3
};

假设player是在全局命名空间中定义的(为了简单起见),在控制台中键入keys(player)和values(player)会输出以下结果:

monitor(function)

调用指定的函数时,控制台会打印一条消息,指示函数名称以及调用该函数时传递给该函数的参数。

function sum(x, y) {
  return x + y;
}
monitor(sum);

monitorEvents(object [, events])

当指定对象上发生指定事件之一时,该事件对象将记录到控制台。 开发者可以指定要监视的单个事件、事件数组或映射到预定义事件集合的通用事件“类型”之一。

下面监视窗口对象上的所有调整大小事件:

monitorEvents(window, "resize");

下面定义了一个数组来监视窗口对象上的“resize”和“scroll”事件:

monitorEvents(window, ["resize", "scroll"])

还可以指定可用的事件“类型”之一,即映射到预定义事件集的字符串。下表列出了可用的事件类型及其关联的事件映射:

例如,以下使用“key”事件类型在“元素”面板中当前选定的输入文本字段上输入所有相应的按键事件。

monitorEvents($0, "key");

以下是在文本字段中输入字符后的示例输出:

profile([name]) and profileEnd([name])

profile() 使用可选名称启动 JavaScript CPU 分析会话, profileEnd() 完成配置文件并在 Performance > Main 轨道中显示结果。

注意:profile() 和 profileEnd() 是 console.profile() 和 console.profileEnd() 的简写。

profile("Profile 1")
profileEnd("Profile 1")

Profile 也可以嵌套,比如下面的示例:

profile('A');
profile('B');
profileEnd('A');
profileEnd('B');

queryObjects(Constructor)

从控制台调用 queryObjects(Constructor) 以返回使用指定构造函数创建的对象数组。 例如:

  • queryObjects(Promise):返回 Promise 示例
  • queryObjects(HTMLElement):返回HTML元素
  • queryObjects(foo):这里 foo 是一个类名,返回通过 new foo() 实例化的所有对象。

queryObjects() 的范围是控制台中当前选择的执行上下文。

table(data [, columns])

通过传入带有可选列标题的数据对象,以表格式打印对象数据。这是console.table() 的快捷方式。 例如,要使用控制台中的表格显示名称列表,可以执行以下操作:

let names = [
  { firstName: "John", lastName: "Smith" },
  { firstName: "Jane", lastName: "Doe" },
];
table(names);

undebug(function)

undebug(function) 停止指定函数的调试,以便在调用该函数时不再调用调试器。这与 debug(fn) 配合使用。

undebug(getData);

unmonitor(function)

unmonitor(function) 停止对指定函数的监视。这与监视器(fn)配合使用。

unmonitor(getData);

unmonitorEvents(object [, events])

unmonitorEvents(object[, events]) 停止监视指定对象和事件的事件。例如,以下命令停止窗口对象上的所有事件监视:

unmonitorEvents(window);

开发者还可以有选择地停止监视对象上的特定事件。 例如,以下代码开始监视当前选定元素上的所有鼠标事件,然后停止监视“mousemove”事件(可能是为了减少控制台输出中的噪音):

monitorEvents($0, "mouse");
unmonitorEvents($0, "mousemove");

values(object)

value(object) 返回一个数组,其中包含属于指定对象的所有属性的值。

let player = {
    "name": "Parzival",
    "number": 1,
    "state": "ready",
    "easterEggs": 3
};

values(player);

参考资料

https://developer.chrome.com/docs/devtools/console/utilities/#dir-function

https://developer.chrome.com/docs/devtools/console/utilities/#dir-function

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表