Heim > Java > javaLernprogramm > Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

Freigeben: 2023-07-26 16:12:13
nach vorne
2127 Leute haben es durchsucht

Einführung: Als Java-Programmierer ist der Chrome-Browser eine der am häufigsten verwendeten Software. Wie viel wissen Sie also über einige seiner Debugging-Tipps?

Verzeichnis

  • Konsole

    • Info, Warnung, Fehler
    • Tabelle
    • .
      Gruppe
    • dir
    • count
    • clear
    • Zeit
    • assert
    Chrome Devtools
    • $(selector, [startNode])
    • $$(selector, [startNode])
    • $
    • copy(obj)
    • inspect(objekt/funktion. )
    • getEventListeners(obj)
    • monitor/unmonitor(function)
    • monitorEvents/unmonitorEvents(object[, events])
    • alias

Konsole

console ist die vom Browser bereitgestellte Schnittstelle. Es handelt sich um ein Objekt, und Sie können in der Konsole überprüfen, welche Methoden der aktuelle Browser unterstützt. Hier sind einige weitere praktische api:console 是浏览器提供的接口。它是一个对象,在控制台中可以查看当前浏览器支持哪一些方法。下面介绍一些比较实用的 api:

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

log

console.log 这可能是学习前端调试技术最基础的第一步了吧,你还记得最开始是从什么地方学习到使用这个方法来调试吗?

console.log(obj1 [, obj2, ..., objN);
console.log(msg [, subst1, ..., substN);
Nach dem Login kopieren

console.log

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

log

🎜

🎜console.log Dies ist möglicherweise der grundlegendste erste Schritt beim Erlernen der Front-End-Debugging-Technologie. Erinnern Sie sich noch daran, dass es mit Where did you begann? lernen, diese Methode zum Debuggen zu verwenden? 🎜
var name = 'anran758';

// 常规使用方式,输出原始值
console.log('Hello'); // Hello
console.log(name); // anran758
console.log(`Hello, ${name}`); // Hello, anran758

// 第一个参数是替换字符串,后面是替换的规则
console.log('Hi, %s. what are you doing', name); // Hi, anran758. what are you doing
console.log('%c I am some great text', 'font-size: 50px;'); // 假装 50px: Hi, anran758. what are you doing
Nach dem Login kopieren
Nach dem Login kopieren
🎜console.logs Funktion besteht darin, eine Nachricht an auszugeben die Konsole. Es kann in mehreren Parametern übergeben werden und das Verhalten der Ausgabe hängt davon ab, ob der erste Parameter eine Ersatzzeichenfolge ist. 🎜🎜Wenn Sie eine Zeichenfolge ersetzen, ersetzen die folgenden Parameter nacheinander die Platzhalter in der Zeichenfolge. Wenn Sie keine Zeichenfolge ersetzen, wird der Wert jedes Parameters ausgegeben:🎜
var name = 'anran758';

// 常规使用方式,输出原始值
console.log('Hello'); // Hello
console.log(name); // anran758
console.log(`Hello, ${name}`); // Hello, anran758

// 第一个参数是替换字符串,后面是替换的规则
console.log('Hi, %s. what are you doing', name); // Hi, anran758. what are you doing
console.log('%c I am some great text', 'font-size: 50px;'); // 假装 50px: Hi, anran758. what are you doing
Nach dem Login kopieren
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

下面是替换字符串所支持的参数, 学习过 C 语言的同学是不是有种熟悉的感觉呀~

占位符描述
%s字符串
%d or %i整数
%o or %O对象
%f浮点数
%c样式代码

在使用时需要注意的一点是:不同占位符在传入值时会预先针对类型的不同而进行格式化,比如:

// 我们在使用了数字占位符,却传入字符串. 内部进行格式化时进行了类似 parseInt('anran758', 10) 的数据转换
// 因此替换结果为 NaN
console.log('result: %d', 'anran758'); // result: NaN

// 再比如,我们传入一个浮点数,经过数据格式化为 3。这一种是符合预期,因为我们要的就是整数
console.log('result: %d', 3.25); // result: 3
Nach dem Login kopieren

了解了这些扩展方式后,我们可以来做一些有意思的事~

比如,如果你打开控制台去访问知乎、百度等网站时,可能会发现控制台有一些开发者留下的彩蛋~ 如招聘信息或者自家公司的立体 logo:

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

哔哩哔哩控制台输出

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

知乎控制台的输出

不过值得一提的是,js 规范中并没有规定 console 该如何实现,不同的浏览器调用 console 后的表现也会不一致。

这导致有一个常见的问题发生: 在调用接口时,明明请求的数据还没回来,打印出来却是有值的。实际上原因可能就是你所使用的浏览器,在实现时该 API 是异步的,它提前给你显示了出来。这个问题我在 segmentfault 的问答区中看到有很多朋友问了这样的问题,特意提一提这事。

解决的方法也很简单,如果你觉得这个值不对劲的话,你可以先将对象转为 json 字符串,然后再解析为对象, 这样就能将原始值输出。

console.log(JSON.parse(JSON.stringify(obj)));
Nach dem Login kopieren

info, warn, error

如果你使用过一些脚手架来搭建项目或者是使用过 SDK 的话,那么在控制台中你能看到以下相关的使用信息。

比如在载入程序时会发出一些运行信息会通过 log 或者 info 来输出信息。

或者你使用的框架中检测到你使用了一些将来可能会被废弃的 API,这时它可能会在控制抛出一个 warn 来警告你。

再或者你使用人家 SDK 的姿势不对,程序内部检测到压根不是这么用的,那么 SDK 内部会抛出错误信息,我们可以通过错误信息来进行排查错误。

这三个 API 更多的是给开发人员提供额外的信息,来查看页面的运行情况,更多用于被封装过后的组件或框架中。

// Info
console.info('Hi, This is message')

// warning 警告
console.warn('On, Your operation may cause a security breach!')

// Error 报错
console.error('Shit! Variable does not exist!')
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

table

console.table只接受一个数组或者对象, 可以接受一个额外的参数来描述表格的列数。它会把数据通过表格的形式打印出来, 这样我们看数据的时候就能直观了很多:

var array = [
  { name: 'Jack', age: 12 },
  { name: 'Tome', age: 18 },
  { name: 'baka', age: 15 }
];

console.table(array);
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

group

console.groupconsole.groupEnd 是成对出现的,就像我们使用的标签一样。group在控制台创建一个新的分组, 输出到控制台上的内容都会被添加一个缩进, 表示该内容属于当前分组, 直到调用 console.groupEnd() 之后, 当前分组才结束。

var boys = [
  { name: 'Jack', age: 12 },
  { name: 'Tome', age: 18 },
  { name: 'baka', age: 15 }
]

boys.forEach(item => {
  console.group(`${item.name}`)
  console.log(`This is ${item.name}`);
  console.log(`${item.name} is ${item.age} years old`);
  console.log(`${item.name} is ${item.age * 7} years old`);
  console.groupEnd(`${item.name}`)
})
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

dir

console.dir,在控制台中显示指定 JavaScript 对象的属性,并通过类似文件树样式的交互列表

我们知道console.log实际上是可以输出 DOM 节点的, 但很多时候我们想查看的不是 DOM 节点,而是该 DOM 节点下的属性,这里就可以使用 dir 来代替 log 来输出 DOM 节点对象.

var head = document.getElementById('head');

console.log(head);
console.dir(head);
Nach dem Login kopieren

但需要注意的是,这个功能是非标准的,尽量不要在生产模式下使用。

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

count

count, 如同字面意思一样. count()会输出每一次被调用的次数. 该方法的兼容性也需要注意, 不适用于生产模式.

console.count('anran758')
console.count('anran758')
console.count('zero')
console.count('anran758')
console.count('zero')
console.count('anran758')
console.count('zero')
console.count('anran758')
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

clear

clear可以清楚调用这个 API 之前的所有 log 信息,这在一个 log 很多很乱的情况下进行某个功能调试会很有作用。

// something info
console.clear();
Nach dem Login kopieren

time

启动一个计时器(timer)来跟踪某一个操作的占用时长。每一个计时器必须拥有唯一的名字。页面中最多能同时运行 10,000 个计时器。跟 group 一样, time 也是配套的。

当以此计时器名字为参数调用 console.timeEnd() 时,浏览器将以毫秒为单位,输出对应计时器所经过的时间.

比如我们统计一下请求接口的时间:

console.time('fetching data');
fetch('https://api.github.com/users/anran758')
  .then(data => data.json())
  .then(data => {
    console.timeEnd('fetching data');
    console.log(data);
  });
Nach dem Login kopieren

这样我们就轻易的知道了这次我们请求花费了多少时间啦~ 但值得注意的是,该方法的统计时间在微观下不够精准,更多时候我们还是需要使用更专业的测试工具后者网站来完成测试性能的工作。

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

assert

console.assert()还是蛮有意思的. 它第一个参数接受一个断言(声明), 第二个参数是一个message. 如果断言为 false,则将一个错误消息写入控制台。如果断言是 true,就当做没发生。语法如下:

console.assert(assertion, message [, subst1, ..., substN]);
Nach dem Login kopieren

这里的断言不一定是false才会触发错误. 我特意去测试了一下, 触发的规则也跟if的判断里的逻辑相反. 只要是断言是0, NaN, undefined, false, null, 空字符串('')这些假值就会激活报错.

// Assertion failed: Here is the "name" can not be empty
var str = '';
console.assert(str, 'Here is the "str" can not be empty');

// Assertion failed: 0 is not allowed!
var num = 0;
console.assert(0, '0 is not allowed!');

// Assertion failed: That is wrong!
console.assert(1 === 2, 'That is wrong!');

// 什么都不会发生
console.assert(1 === 1, 'That is wrong!');
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!


以上是 18.01.30 分享出来的内容,在这之后又发现了一些好用的功能,如果你跟笔者使用的都是 chrome 浏览器的话,可以继续往下看,笔者将逐一进行介绍:

Chrome Devtools

Unten vorgestelltchrome devtools in control Einige von der Plattform bereitgestellte Syntaxzucker können nur auf der Konsole und nicht direkt im Code verwendet werden. Um zu unterscheiden, ob die Methode vom Browser bereitgestellt oder in unserem eigenen Code definiert wird, können Sie console.log (Methode), wenn das, was gedruckt wird, [Command Line API]< /code> ist eine integrierte Methode. <code style="padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">chrome devtools 在控制台提供的一些语法糖,这些方法只能控制台使用,而不能直接在代码里使用。区分是浏览器提供的还是我们自己代码中定义的方法可以使用console.log(method),如果打印出来的是 [Command Line API] 就是内置方法。

$(selector, [startNode])

我相信做过前端的朋友都了解 jqeury$ 选择器,乃至于我们看到这个符号就能联想到 DOM 相关的东西。

IE9+ 引入了 document.querySelector(),可以让我们很方便找到对应的 DOM 元素,但该 API 拼写起来确实有点麻烦,并且该方法的使用频率还不低。因此 chrome 开发工具提供一个$

🎜$(selector, [startNode] ) 🎜🎜

🎜Ich glaube, dass Freunde, die Frontend gemacht haben, das wissen jqeury< /code> von <code style="padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font -family: 'Operator Mono', Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">$ Selektor, damit wir dieses Symbol sehen Sie können sich Folgendes vorstellen: DOM verwandte Dinge. 🎜🎜IE9+ führte document.querySelector(), was uns dies ermöglicht Es ist praktisch, die entsprechende DOM Element, aber die API ist wirklich ein etwas mühsam zu buchstabieren, und die Häufigkeit der Verwendung dieser Methode ist nicht gering. DaherChrome-Entwicklungstools bieten einen $ Alias, den wir verwenden können. 🎜

$ 接受两个参数,第一个参数接受一个选择器,第二个参数接受一个 DOM 元素表示从该元素下开始搜索,不传默认为 document.

我们可以简单做一个 demo 实验一下:

<!-- 一个简单的嵌套结构 -->
<div class="main main.container">
  <div class="start"></div>
  <div class="main content"></div>
  <div class="end"></div>
</div>
Nach dem Login kopieren

将上面的 demo 保存至 html 中后,在 chrome 浏览器中打开该文件。输入以下代码查看实际效果:

// 查看是否是 Command Line API,如果不是的话那就意味着你在全局中引入了第三方库,它会覆盖浏览器默认的 API
$;

// 从 document 中获取第一个 main 元素,
var container = $(&#39;.main&#39;);

// 我们将上面获取到的节点作为 startNode, 从该节点往下找可以找到 content
var content = $(&#39;.main&#39;, container);

console.log(&#39;container: &#39;, container, &#39;\n\n&#39;);
console.log(&#39;content: &#39;, content, &#39;\n\n&#39;);
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

$$(selector, [startNode])

$$ 相当于 document.querySelectorAll,但细节上看会有些不同。$$ 调用后会返回一个数组,而后者调用后返回的是一个 NodeList,缺少一些数组的方法。

$$$ 接受的参数的功能是一致的,就不过多介绍:

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

$_

说这个方法之前需要先科普一下返回值这个概念:js 每一个表达式都会有返回值,比如你定义一个函数,但是没有 return 任何东西,那么调用这个函数后的返回值就是 undefined。这个知识点可以在 你不知道的 JavaScript 系列中了解更详细的解析。

function fn() {} // 返回值是 undefined
fn(); // 返回值是 undefined

var n = 0; // 返回值是 undefined
n += 1; // 返回值是 1
[1, 2, 3].map(n => n * 2); // [2, 4, 6]
Nach dem Login kopieren

好啦,话归正题~有时候为了方便,我们会直接在控制台进行运算,此时我们可以使用 $_ 获取上一个表达式的值。在某些时候可以提供便利性。

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

cleardir 分别是 console.clearconsole.clear、dir 的别名。

copy(obj)

该方法可以将数据 copy 至粘贴板。

当初发现这个 API 时还是挺意外的。当时需要将城市映射表数据改造为另一种结构,就直接在控制台中处理好了。接着就在想如何将数据弄出来,数据量很大,不好拷贝下来。然后突发奇想,看看控制台有没有支持复制数据的功能,随便尝试了以下,然后就成功了。

这就意味着以后我们做一些数据处理可以直接在控制台中进行处理,在某些方面上会挺方便的,比如快速生成一个长度为 20 的数组,数组内有 0 ~ 19 的数字:

// 要检查一下有没有全局变量覆盖了默认的 API
// ƒ copy(value) { [Command Line API] }
copy;

var arr = [];
for (let i = 0; i < 20; i++) {
  arr.push(i);
}

// 此时可以检查是否复制成功
console.log(arr);
copy(arr);
Nach dem Login kopieren
Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

inspect(object/function)

inspect 接受一个对象或者函数。

如果这个参数是一个 DOM 元素的话,并且它是存在 DOM 树中的,那么它会切换到 Elements 这个 tab。如果这个 DOM 元素没有被插入 DOM 树种的话,那仅仅会切换 tab。

如果传入的是一个函数,会将这个函数传入 source 面板,用以检查函数(比起查看 DOM 的功能, 传递函数后的功能除了格式代码外并没有想到好的用处)

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

代码格式前

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

Nach dem Codeformat

getEventListeners(obj)

getEventListeners(obj) gibt den angegebenen DOM Bindung Ein bestimmter Ereignis-Listener ist beim Debuggen des DOM manchmal sehr praktisch. Nehmen Sie als Beispiel die Zhihu-Homepage. Sie können document.body</ code> Bindungsereignisse: <code style="padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">getEventListeners(obj) 返回指定 DOM 绑定的事件监听器,有时候调试 DOM 时会挺方便的。以知乎首页为例,这样可以很清晰的看到 document.body 绑定的事件:

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

monitor/unmonitor(function)

调用指定的函数时,会向控制台记录一条消息,指示函数名称以及调用时传递给函数的参数。使用unmonitor(function)停止监控。

相当于在这个函数的头部添加了一个 console.info 的信息,算是语法糖吧~ 主要是调试时使用。当

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!

monitorEvents/unmonitorEvents(object[, events])

monitorEvents 监控指定 DOM

Die unbekannte Konsolen-Debugging-Methode von Google Chrome!🎜🎜🎜🎜🎜🎜🎜monitor /unmonitor(function )🎜🎜🎜🎜Wenn die angegebene Funktion aufgerufen wird, wird eine Nachricht in der Konsole protokolliert, die den Funktionsnamen und die Parameter angibt, die beim Aufruf an die Funktion übergeben wurden. Verwenden Sie unmonitor(function)Überwachung stoppen. 🎜🎜Es entspricht dem Hinzufügen eines console.info< /code > Informationen können als syntaktischer Zucker betrachtet werden, der hauptsächlich beim Debuggen verwendet wird. Wenn 🎜🎜<img src="https://img.php.cn/upload/article/001/273/690/70f9ba5e847664c96444d372aa4ea544-20.jpg"/ alt="Die unbekannte Konsolen-Debugging-Methode von Google Chrome!" >🎜🎜🎜🎜🎜🎜🎜monitorEvents/unmonitorEvents (object[ , Ereignisse])🎜🎜🎜🎜<code style="max-width:90%"Operator Mono', Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">monitorEvents ÜberwachungsbezeichnungDOM Ereignisse: Wenn der zweite Parameter nicht übergeben wird, werden alle Ereignisse überwacht. 🎜

相对应的是使用unmonitorEvents(object[, events])停止监控事件。

// 监控/停止监控 window 中触发的所有事件
monitorEvents(window);
unmonitorEvents(window);

// or 监控/停止监控 window 中触发的 mouseover 事件
monitorEvents(window, &#39;mouseover&#39;);
unmonitorEvents(window, &#39;mouseover&#39;);

// or 监控/停止监控 window 中触发的指定多个事件
monitorEvents(window, [&#39;mouseover&#39;, &#39;mouseout&#39;]);
unmonitorEvents(window, [&#39;mouseover&#39;, &#39;mouseout&#39;]);
Nach dem Login kopieren

别名

对于一些常用的方法, chrome tools 提供了别名以供我们快速使用:

缩短前 缩短后
console.clear clear
console.dir dir
console.table table
Object.keys keys
Object.values values

参考资料:

  • Console
  • 从 console.log 说起(上)
  • Console Utilities API Reference

Das obige ist der detaillierte Inhalt vonDie unbekannte Konsolen-Debugging-Methode von Google Chrome!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Java学习指南
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage