许多开发者只知道浏览器DevTool调试的基础知识。使用最多的console.log()对于在代码运行时输出值非常有用,通常可以帮助查明错误。然而,有一种高级用法很多人都不知道,因此未被充分利用,更快、更容易和更有用的高级用法可用于客户端脚本、Web工作者和服务工作人员。Node.js和Deno运行时控制台也支持许多功能。1.使用ES6解构输出变量名当监控多个值时,日志记录会变得复杂。通常需要添加更多信息,例如constx=42;console.log('variableX:',variableX);//orconsole.log(`variableX:${variableX}`);/*output:variableX:42*/一个更快的选择是使用ES6对象销毁分配。这会将变量添加到具有匹配属性名称的对象。换句话说,只需在变量周围放置{和}括号即可显示其名称和值:console.log({variableX});/*output:{variableX:42}*/2.使用适当的日志消息类型控制台。log()最简单的方法众所周知:console.log('no-frillslogmessage');但这不是唯一的类型。消息可以归类为信息(与console.log()相同):console.info('这??是一条信息消息');warnings:console.warn('我警告过你这可能会发生!');errors:console。error('对不起戴夫,恐怕我做不到');或者不太重要的debug调试信息:console.debug('nothingtoseehere-pleasemovealong');console.table()可以以更友好的格式输出对象值:constobj={propA:1,propB:2,propC:3};console.table(obj);console.table()也可以用于一维或多维数组:constarr1=[[1,2,3],[4,5,6],[7,8,9]];控制台表(arr1);或对象数组:constarr2=[{a:1,b:2,c:3},{a:4,b:5,c:6},{a:7,b:8,c:9}];console.table(arr2);其他选项有:console.dir(obj)显示JavaScript对象中的交互式属性列表console.dirxml(element)显示指定HTML或XML节点的后代元素的交互式树console.clear()清除控制台信息。3.过滤日志消息浏览器以适当的颜色显示日志消息,但也可以过滤以显示特定类型。单击控制台面板左上角的图标可打开Chrome的边栏:请注意,console.debug()只会在查看Verbose选项时显示消息。4.使用printf类型的消息所有日志类型都可以使用C风格的printf消息格式,它定义了带有用于变量替换的%指示符的模板。例如:console.log('Theanswerto%sis%d.','life,theuniverseandeverything',42);//answertolife,theuniverseandeverythingis42.5.日志样式可以在任何标准CSS中使用,作为消息类型的第二个参数中的字符串传递,设置日志消息的样式。消息中的%c标记指示应用样式的位置,例如console.log('%cOK,现在情况真的很糟糕!',`font-size:2em;padding:0.5em2em;margin:1em0;color:yellow;background-color:red;border-radius:50%;`);DevTools控制台中的结果是:6.使用类测试断言console.assert()当条件不成立时,可以使用类测试命令输出信息。可以使用条件定义断言,然后在该条件失败时输出一个或多个对象,例如console.assert(life===42,'lifeisexpectedtobe',42,'butissetto',life);或者,可以使用消息和替换值:console.assert(life===42,'lifeisexpectedtobe%sbutissetto%s',42,life);当条件失败时,这两个选项都会显示断言错误:7.运行堆栈跟踪可以使用console.trace()输出构成当前执行点的所有函数调用的日志:functioncallMeTwo(){console.trace();returntrue;}functioncallMeOne(){returncallMeTwo();}constr=callMeOne();跟踪显示每次调用的行,可以在控制台窗格中折叠或展开:8.组日志消息可以在console.group(label)的开头和结尾使用console.groupEnd()将日志消息分为命名组。消息组可以嵌套、折叠或展开(console.groupCollapsed(label)最初显示组折叠)://startloggroupconsole.group('iloop');for(leti=3;i>0;i--){console.log(i);//启动折叠日志组console.groupCollapsed('jloop');for(letj=97;j<100;j++){console.log(j);}//结束日志组(jloop)console.groupEnd();}//结束日志组(iloop)console.groupEnd();9.使用性能计时器time(label)命令启动一个计时器。timeEnd(label)将报告到达相关命令后经过的时间(以毫秒为单位)。计时器可用于评估操作的性能-比管理您自己的Date()计算更容易和更准确,例如//启动timerconsole.time('bigloop');for(leti=999999999;i>0;i--);//显示运行时间console.timeEnd('bigloop');一个页面最多可以添加10,000个定时器,并且console.timeLog(label)命令将在不停止定时器的情况下报告经过的时间。一个类似的选项是console.count(label),它报告命令被调用的次数。console.countReset(label)将命名计数器重置为零。10.按名称调试和监控功能DevToolsSources面板(或Firefox中的Debugger)允许您通过单击行号打开文件和设置断点。基于Chrome的浏览器还允许您通过在控制台中键入debug(functionName)来设置断点,例如调试(做某事);该函数必须在全局命名空间中可用,并且浏览器会在调用时立即启动调试器。可以使用undebug(functionName)或重新加载页面来取消调试。monitor(functionName)及其关联的unmonitor(functionName)命令以类似的方式使用。他们不会停止执行,而是记录对函数的每次调用并显示传递的参数:函数doSomething调用参数:“hello”,211。查找并修复事件侦听器FirefoxDevTools检查器面板中任何附加的事件图标显示在旁边处理程序的DOM元素。单击该图标可查看函数名称,然后单击左侧的箭头图标可展开代码。此外,“在调试器中打开”图标在调试器窗格中查找处理程序,因此您可以设置断点:Chrome的实现并不理想,但您可以通过将DOM节点传递给getEventListeners()函数来查看所有事件侦听器来完成此操作.例如,getEventListeners($0)显示应用于元素面板中当前突出显示的DOM节点的侦听器:12.将属性复制到剪贴板控制台copy()命令可以将任何值复制到剪贴板。它可以是原始值、数组、对象或DOM节点。当传递一个DOM节点时,copy()将该元素及其所有子元素的HTML放置在剪贴板上。相当于右键单击一个节点,然后选择Duplicate,然后选择DuplicateExternalHTML。该命令将copy(document.documentElement)复制整个HTML文档。这可以粘贴到文本编辑器中,以便于阅读标记。最后,BrowserDevTools已经从一个基本的控制台发展成为一个复杂的开发和调试环境。console.log()将永远受欢迎,但其他选项可能会提供更快、更简单的方法来实现零错误!本文翻译自文章:12WaystoImproveYourDevToolsConsoleLoggingPastEssaysVue3FamilyBucket+ElementPlus+Vite+TypeScript+EslintProjectConfigurationBestPractices10AdvancedTipstoImproveHappinessinTypeScriptRecommended7Vue2andVue3SourceCodesWelcome关注公众号:《全栈实战》,回复“电子书”获取以下300本技术精华书籍,猫哥wx:CB834301747。通过阅读这篇文章,如果你有所收获,你可以点赞和观看。这会成为我继续分享的动力,谢谢~
