Javascript调试命令——你只会Console.log() ?

news/2024/9/23 18:16:45/文章来源:https://www.cnblogs.com/520future/p/8341306.html

Javascript调试命令——你只会Console.log() ?

https://segmentfault.com/a/1190000012957199

Console 对象提供对浏览器控制台的接入(如:Firefox 的 Web Console)。不同浏览器上它的工作方式是不一样的,但这里会介绍一些大都会提供的接口特性。
Console对象可以在任何全局对象中访问,如 Window,WorkerGlobalScope 以及通过属性工作台提供的特殊定义。
它被浏览器定义为 Window.Console,也可被简单的 Console 调用。

最常用的方法就是Console.log(),就是在控制台输出内容。刚开始学前端的时候看到大家都是用的Console.log(),几乎没有见过Console的其他用法,难道Console真的没有别的用法了?查了一下后发现Console还是非常强大的,至于为什么很少看到有人用可能是因为用过都删掉了吧。在此记录一下Console的其他用法。

注意:因为Console 对象提供对浏览器控制台的接入 所以在不同浏览器中的支持及表现形式可能不太一样,但是调试内容只有我们开发者会看,所以保证开发环境能用这些方法就可以了,下面演示全部都为Chrome上面的效果。

分类输出

不同类别信息的输出

console.log('文字信息');
console.info('提示信息');
console.warn('警告信息');
console.error('错误信息');

分组输出

使用Console.group()Console.groupEnd()包裹分组内容。

还可以使用Console.groupCollapsed()来代替Console.group()生成折叠的分组。

console.group('第一个组');console.log("1-1");console.log("1-2");console.log("1-3");
console.groupEnd();console.group('第二个组');console.log("2-1");console.log("2-2");console.log("2-3");
console.groupEnd();

Console.group()还可以嵌套使用

console.group('第一个组');console.group("1-1");console.group("1-1-1");console.log('内容');console.groupEnd();console.groupEnd();console.group("1-2");console.log('内容');console.log('内容');console.log('内容');console.groupEnd();
console.groupEnd();console.groupCollapsed('第二个组');console.group("2-1");console.groupEnd();console.group("2-2");console.groupEnd();
console.groupEnd();

表格输出

使用console.table()可以将传入的对象,或数组以表格形式输出。适合排列整齐的元素

var Obj = {Obj1: {a: "aaa",b: "bbb",c: "ccc"},Obj2: {a: "aaa",b: "bbb",c: "ccc"},Obj3: {a: "aaa",b: "bbb",c: "ccc"},Obj4: {a: "aaa",b: "bbb",c: "ccc"}
}console.table(Obj);var Arr = [["aa","bb","cc"],["dd","ee","ff"],["gg","hh","ii"],
]console.table(Arr);

查看对象

使用Console.dir()显示一个对象的所有属性和方法
在Chrome中Console.dir()Console.log()效果相同

var CodeDeer = {nema: 'CodeDeer',blog: 'www.xluos.com',}
console.log("console.dir(CodeDeer)");
console.dir(CodeDeer);console.log("console.log(CodeDeer)");
console.log(CodeDeer);

查看节点

使用Console.dirxml()显示一个对象的所有属性和方法
在Chrome中Console.dirxml()Console.log()效果相同

百度首页logo的节点信息

条件输出

利用console.assert(),可以进行条件输出。

  • 当第一个参数或返回值为真时,不输出内容
  • 当第一个参数或返回值为假时,输出后面的内容并抛出异常
console.assert(true, "你永远看不见我");
console.assert((function() { return true;})(), "你永远看不见我");console.assert(false, "你看得见我");
console.assert((function() { return false;})(), "你看得见我");

计次输出

使用Console.count()输出内容和被调用的次数

(function () {for(var i = 0; i < 3; i++){console.count("运行次数:");}
})()

追踪调用堆栈

使用Console.trace()来追踪函数被调用的过程,在复杂项目时调用过程非常多,用这个命令来帮你缕清。

function add(a, b) {console.trace("Add function");return a + b;
}function add3(a, b) {return add2(a, b);
}function add2(a, b) {return add1(a, b);
}function add1(a, b) {return add(a, b);
}var x = add3(1, 1);

计时功能

使用Console.time()Console.timeEnd()包裹需要计时的代码片段,输出运行这段代码的事件。

  • Console.time()中的参数作为计时器的标识,具有唯一性。
  • Console.timeEnd()中的参数来结束此标识的计时器,并以毫秒为单位返回运行时间。
  • 最多同时运行10000个计时器。
console.time("Chrome中循环1000次的时间");
for(var i = 0; i < 1000; i++)
{}
console.timeEnd("Chrome中循环1000次的时间");

性能分析

使用Console.profile()Console.profile()进行性能分析,查看代码各部分运行消耗的时间,但是我在Chrome自带的调试工具中并没有找到在哪里查看这两个方法生成的分析报告。应该需要其他的调试工具。

具体参考这里:
http://www.oschina.net/transl...

有趣的Console.log()

最后再来介绍一下强大的Console.log(),这个方法有很多的用法(其他输出方法的用法,如error()等,可以参照log()使用)。

一、提示输出

可以再输出的对象、变量前加上提示信息,增加辨识度

var ans = 12345;
console.log("这是临时变量ans的值:",ans);

二、格式化输出

占位符含义
%s 字符串输出
%d or %i 整数输出
%f 浮点数输出
%o 打印javascript对象,可以是整数、字符串以及JSON数据

样例:

var arr = ["小明", "小红"];console.log("欢迎%s和%s两位新同学",arr[0],arr[1]);console.log("圆周率整数部分:%d,带上小数是:%f",3.1415,3.1415);

三、自定义样式

使用%c为打印内容定义样式,再输出信息前加上%c,后面写上标准的css样式,就可以为输出的信息添加样式了

console.log("%cMy stylish message", "color: red; font-style: italic");console.log("%c3D Text", " text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:5em");console.log('%cRainbow Text ', 'background-image:-webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );color:transparent;-webkit-background-clip: text;font-size:5em;');console.log('%cMy name is classicemi.', 'color: #fff; background: #f40; font-size: 24px;');

总结

Console的用法很多,有些再调试过程中非常实用,可以节省很多时间。当然我知道debug还是用断点调试的方法比较好,但是小问题用“printf大法”也是很好用的(滑稽脸)。

参考资料

  1. https://developer.mozilla.org...
  2. http://www.jb51.net/article/5...
  3. https://segmentfault.com/a/11...
  4. https://www.cnblogs.com/liyun...
  • 18 小时前发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/802329.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

敏捷研发管理必备:五款必备敏捷项目管理工具

Leangoo是一款专注于敏捷管理的软件,看板的管理方式,简洁高效。他聚焦于敏捷管理,它支持Scrum敏捷开发、Scrum of Scrums以及大规模敏捷管理等方法,比如Scrum看板、燃尽图、迭代管理、需求管理、敏捷度量指标、路线图、缺陷管理、测试管理等等,帮助团队轻松跟踪进度,提高…

高级语言程序设计第一次个人作业

班级链接:https://edu.cnblogs.com/campus/fzu 作业要求链接:https://edu.cnblogs.com/campus/fzu/2024C/homework/13264 学号:102400130 姓名:杨子旭 安装c程序有时候会忘记冒号,逐渐适应后就不怎么会忘了这两个一次过。但对于第三个中先使用butler再定义不太理解。之前一…

ES毛刺问题

es 毛刺问题 在写入时,边写边查并不会出现明显毛刺,但在写入时不查询,写入完成后再查询会出现明显毛刺。下图的三个毛刺是在是用反转索引时,写入完成后切换索引时出现。通过 remove 和 add 别名可以无感切换索引 /_aliases {"actions": [{"add": {&quo…

『模拟赛』CSP-S模拟3

『模拟赛记录』CSP-S模拟3因为正式集训所以不叫加赛了。Rank Upd:非常好 数据,掉分掉 Rank。 还行,其实是 Rank6,其实其实是 Rank4(丁真说正式比赛不会改数据。A. 奇观 简单题(?)。 赛时琢磨了一会想到了 \(Ans=C\cdot C\cdot F\),打出了 \(m=0\) 性质和 \(O(n^2)\) d…

Spark(七)Spark运行架构

运行架构Spark框架的核心是一个计算引擎,采用了标准master-slave的结构 如图展示了一个Spark执行时的基本结构,Driver表示master,负责管理整个集群中的作业任务调度,Executor是slave,负责实际执行任务核心组件 1. DriverSpark驱动器节点,用于执行Spark任务中的main方法,…

Go进阶01:golang context 上下文用法详解(比较好理解)

1 前言最近实现系统的分布式日志与事务管理时,在寻求所谓的全局唯一Goroutine ID无果之后,决定还是简单利用Context机制实现了基本的想法,不够高明,但是好用.于是对它当初的设计比较好奇,便有了此文.Context是golang官方定义的一个package,它定义了Context类型,里面包含了Deadl…

Kernel Stack栈溢出攻击及保护绕过

本文介绍Linux内核的栈溢出攻击,和内核一些保护的绕过手法,通过一道内核题及其变体从浅入深一步步走进kernel世界。前言 本文介绍Linux内核的栈溢出攻击,和内核一些保护的绕过手法,通过一道内核题及其变体从浅入深一步步走进kernel世界。 QWB_2018_core 题目分析 start.sh …

【避雷指南】自学AI人工智能常踩的4个大雷区

​ 1、数学基础学习人工智能时,有一种常见的误解,认为一定要数学学的很好,才能进一步学人工智能。这种观念并不正确。虽然数学是AI的基石,为算法和模型提供了理论基础,但过分沉迷于数学理论可能会让学习过程变得枯燥无味,甚至削弱学习积极性。 正确的做法是将数学学习与A…

高级语言程序设计课程第一次个人作业

班级链接:https://edu.cnblogs.com/campus/fzu/2024C 作业要求链接:https://edu.cnblogs.com/campus/fzu/2024C/homework/13264 102400108 王馨怡 2.1 问题:computer下一句与computer相连(漏加了\n) 解决方法:加上\n2.22.3总结:本次作业为基础输出练习,让我更深入了解到…

高级语言程序设计课程第一次作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13264 学号:102400201 姓名:陈林祺 2.12.22.3问题:无 思考总结:无