这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战
console.log
大家都很熟悉很常用了,能够将代码里的相关信息,输出到浏览器开发工具的 console
面板,对代码进行调试和分析。
除了 console.log
以外,还有 console.err
,console.table
等等。另外浏览器开发工具的console
面板,也有很多不错的使用技巧。
console 相关方法
在Chrome
浏览器打印一下console
,可以看到console
除了log
,还有很多其它方法。
在 Firefox 浏览器打印 console,看到方法有些许不同,可见有一些是浏览器自行实现的:
console.assert
接受多个参数,第一个参数为布尔表达式,后面的参数为多个对象或者多个字符串:
console.assert(assertion, obj1 [, obj2, ..., objN]);
console.assert(assertion, msg [, subst1, ..., substN]);
如果断言为false,则将一个错误消息写入控制台。如果断言是 true
,没有任何反应。
例如一个判断数字是否是偶数的断言如下:
也可以是输出多个对象或者对象字符串:
console.clear
清空 console
面板。在浏览器运行该方法,可以看到 console
面板被清空。
其它清空 console
面板的方法有,点击左上角的🚫按钮,或者快捷键Ctrl+L
。
console.count
用于输出console.count()
被调用的次数。该方法接受一个字符串作为label
。
如果没有传入 label
,那该方法输出的次数是其被调用的次数。
function greet() {
console.count();
console.count();
}
greet();
greet();
console.count();
输出如下:
default: 1
default: 2
default: 3
default: 4
default: 5
如果传入了label
,单独计算各label
调用的次数:
function greet() {
console.count('AAAAA');
console.count('BBBBB');
}
greet();
greet();
console.count('CCCCC');
输出如下:
AAAAA: 1
BBBBB: 1
AAAAA: 2
BBBBB: 2
CCCCC: 1
console.countReset
用于重置 console.count
的次数:
function greet() {
console.count('AAAAA');
console.count('BBBBB');
}
greet();
console.countReset('AAAAA');
greet();
输出如下:
AAAAA: 1
BBBBB: 1
AAAAA: 1
BBBBB: 2
console.dir
、console.dirxml
console.dir
以树形样式打印对象属性。多数情况该方法与console.log
输出对象的表现相似。
在正则表达式的输出上有明显不同:
let rgx = /foo/
console.log(rgx);
console.dir(rgx);
关于console.dir
和console.log
的具体差异可以查看 stack overflow 上的回答。
console.dirxml
用于以标签形式打印 HTML 节点,如果无法作为HTML节点打印的,会以对象的形式打印:
console.dirxml(document.body); // 以 HTML 标签形式打印
console.dir(document.body); // 以对象形式打印
console.dirxml({a:1}); // 以对象形式打印
console.group
、console.groupCollapsed
、console.groupEnd
这几个方法用于给输出内容进行分组,使用如下:
console.group();
console.log('AAAAAA');
console.log('BBBBBB');
console.log('CCCCCC');
console.log('DDDDDD');
console.groupEnd();
console.groupCollapsed
与 console.group
的区别在于日志组默认是展开的还是折叠的:
console.groupCollapsed();
console.log('AAAAAA');
console.log('BBBBBB');
console.log('CCCCCC');
console.log('DDDDDD');
console.groupEnd();
console.table
将数据以表格的形式展示,这个方法可以更加直观地打印数组。
// 打印一维数组
console.table(["apples", "oranges", "bananas"]);
// 打印二维数组
var people = [["John", "Smith"], ["Jane", "Doe"], ["Emily", "Jones"]]
console.table(people);
//打印对象
let obj = {a:{a:1,b:2},b:{a:3,b:4},c:{a:4,b:5}}
console.table(obj)
可以对相关列进行过滤,如下所示:
console.table(obj, ['b']);
console.time
、console.timeEnd
、console.timeLog
当我们需要跟踪一个操作、一段代码运行时间时,可以使用console.time
启动一个计时器,用console.timeEnd
终止计时并得到时间,console.timeLog
可以查看当前计时器时长:
console.time();
let sum = 0;
console.timeLog();
for(let i = 0; i < 10000000; i++) {
sum += i;
}
console.timeEnd();
输出如下:
default: 0.001953125 ms
default: 78.697998046875 ms
可以接受一个参数作为 label
:
console.time('TIME');
let sum = 0;
console.timeLog('TIME');
for(let i = 0; i < 10000000; i++) {
sum += i;
}
console.timeEnd('TIME');
输出如下:
TIME: 0.001953125 ms
TIME: 78.5849609375 ms
console.trace
输出当前调用栈的信息。
function foo() {
function bar() {
console.trace();
}
bar();
}
foo();
console.debug
、console.warn
、console.log
、console.info
、console.error
这几个方法都类似,不通点在于打印的样式:
console.log('Hello');
console.debug('Hello');
console.warn('Hello');
console.info('Hello');
console.error('Hello');
在 Chrome 表现:
在 Firefox 表现:
更多方法及细节可以查阅规范、Chrome 文档 或 MDN文档