浏览器控制台console相关内容整理

console对象提供对浏览器控制台的接入。不同浏览器上它的工作方式是不一样的,本文示例和截图均来自Chrome浏览器。


一、输出文本到控制台

console对象中较多使用的主要有四个方法:

console.log(),console.info(),console.warn(),console.error()

语法

    console.log(obj1[,obj2,...,objN]);
    console.log(msg [, subst1,...,substN]);
    console.log('String: %s,Int:%d,Float: %f, Object: %o',str,ints,floats,obj)
    console.log(`temp的值为:${temp}`);
    //console.exception()是console.error()的别名;它们功能相同。

参数

    obj1...objN
    一个用于输出的javascript对象列表。其中每个对象会以字符串的形式按照顺序依次输出到控制台。
    msg
    一个JavaScript字符串,其中包含零个或多个替代字符串
    subst1...stbstN
    javascript对象,用来依次替换msg中的替代字符串。你可以在替代字符串中指定对象的输出格式。

它可以格式化打印字符的功能类似于C语言的printf方法。

格式化打印:

字符 描述
%o 打印javascript对象,可以是整数、字符串以及JSON数据
%d or % i 打印整数
%s 打印字符串
%f 打印浮点数

当要替换的参数类型和预期的打印类型不同时,参数会被转换成预期的打印类型

    for(let i=0;i<5;i++){
        console.log("hello,$s. You've called me %d times.",'Bob',i+1);
    }
    console.log('I want to print a number: %d','string');

输出显示如下:

    hello, Bob. You've called me 1 times.
    hello, Bob. You've called me 2 times.
    hello, Bob. You've called me 3 times.
    hello, Bob. You've called me 4 times.
    hello, Bob. You've called me 5 times.
    I want to print a number: NaN  

可以看到最后一行,string被转换成了NaN

我们可以为console定义样式,使用%c

    console.log('%cMy strylish message','color:red;font-style:italic');

效果:

模板输出示例结果

二、在控制台输出树状信息

可以使用console.group/console.groupCollapsed方法来组织自己的打印内容以期获得更好的显示方式。

在web控制台上创建一个新的分组。随后输出到控制台上的内容都会被添加和一个缩进,表示该内容属于当前分组,直到调用console.groupEnd()之后,当前分组结束。console.group和console.groupCollapsed方法的不同点是,新建的分组默认是折叠的,用户必须点击一个按钮才能将折叠的内容打开。

语法:console.group();console.groupEnd();console.groupCollapsed();

参数:无

示例

    console.log("this is the outer level");
    console.group();
    console.log("level 2");
    console.group();
    console.log('level 3');
    console.warn('more of level 3');
    console.groupEnd();
    console.log('back to level 2');
    console.groupEnd();
    console.debug('back to the outer level');

执行结果

1树状信息示例结果

三、定时器:timetimeEnd

可以启动一个计时器来跟踪某一个操作的占用时长。每一个计时器必须拥有唯一的名字,页面中最多可同时运行10000个计时器。当以此计时器名字为参数调用console.timeEnd()时,浏览器将以毫秒为单位,输出对应计时器所经过的时间。

语法:console.time(timerName);console.timeEnd(timerName);

参数:新计时器的名字,用来标记这个计时器,作为参数调用console.timeEnd()可以停止计时并将经过的时间在终端中打印出来。

示例:

    console.time('answer time');
    alert('click to continue');
    console.timeEnd('answer time');

示例结果:

定时器示例结果

四、堆栈跟踪

向web控制台输出一个堆栈跟踪。

语法:console.trace()

参数:无

示例1:打印当前执行位置到console.trace()的路径信息

    foo();
    function foo(){
        function bar(){
            console.trace();
        }
        bar();
    }

示例1结果:

堆栈跟踪示例结果

示例2

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

示例2结果

trace示例2结果

五、console.table()

将数据以表格的形式显示。在数组中的每一个元素(或对象的可枚举的属性)将会以行的形式显示在table中。

table的第一列是index。如果数据是一个数组,那么值就是索引。如果数据是一个对象,那么它的值就是属性名称。

语法:console.table(data [,columns]);

参数:

    data:要显示的数据必须是数组或者是对象,强制必须有并且是一个数组或对象。
    columns:一个数组需要包括列的名称进行输出否则显示为索引。

示例1:打印单一参数类型

console.table(['apples','oranges','bananas']);

示例1结果:

table示例结果

示例2:打印一个属性值是字符串的对象

    function Person(firstName,lastName){
        this.firstName=firstName;
        this.lastName=lastName;
    }
    var me=new Person('john','smith');
    console.table(me);
table示例2结果

示例3:打印复合的参数类型

    //如果需要打印的元素在一个数组中,或者需要打印的属性在一个对象, 并且他们本身就是一个数组或者对象,则将会把这个元素显示在同一行, 每个元素占一列
    var people=[["John", "Smith"], ["Jane", "Doe"], ["Emily", "Jones"]];
    console.table(people);

示例3结果

table示例3结果

示例4:控制每行元素是否显示

    //console.table会把所有的元素罗列在每一列,你可以使用每一列的元素名做为第二个参数去选择你所需要的列的内容去显示。
    function Person(firstName,lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }

    var john = new Person("John", "Smith");
    var jane = new Person("Jane", "Doe");
    var emily = new Person("Emily", "Jones");

    console.table([john, jane, emily], ["firstName"]);

示例4结果

1534158671186.jpg

可以通过点击每列的顶部标签来得到每一个列里面的重排元素。


六、console.assert()

用来判断一个表达式或变量是否为真。如果assertionfalse,则将一个错误消息写入控制台。如果为true,没有任何反应。

语法:

    console.assert(assertion,obj1 [,obj2,...objN]);
    console.assert(assertion,msg [,subst1,...,substN]);//类似c语法的格式输出

参数:

    assertion
    一个布尔表达式。如果assertion为假,消息将会被输出到控制台之中。
    obj1...objN
    被用来输出的JavaScript对象列表,最后输出的字符串是各个对象依次拼接的结果。
    msg
    一个包含零个或多个子串的JavaScript字符串。
    subst1...substN
    各个消息作为子串的JavaScript对象。这个参数可以让你能够控制输出的格式。

七、清空控制台信息:console.clear()


八、console.count()

输出count()被调用的次数。

如果有label,此函数输出为那个指定的label和count()被调用的次数。
如果没有lable,此函数输出count()在其所处位置上被调用的次数。

语法:console.count([label])

参数:lable字符串,如果有,count()输出此给定的label及其被调用的次数

示例代码:

    var user='';
    function greet(){
        console.count();
        return 'hi '+user;
    }
    user = 'bob';
    greet();
    user = 'alice';
    greet();
    greet();
    console.count();

示例结果:

count示例结果1

如果我们给count加上参数,greet里面改为console.count('inner');最后改为console.count('outer');

则输出结果如下:

count示例结果2

当然也可以把变量user传递给count()


九、console.dir()

在控制台显示指定JavaScript对象的属性,并通过类似文件树样式列表显示。

语法:console.dir(Object);

参数:object打印出该对象的所有属性和属性值


十、console.dirxml()

显示一个明确的xml/html元素的包括所有后代元素的交互树。如果无法作为一个element被显示,那么会以javascript对象的形式作为替代。它的输出是一个继承扩展的节点列表,可以让你看到子节点的内容。

语法:console.dirxml(object)

参数:object一个属性将被输出的javascript对象。


初学者能力有限,在一次开发中发现console.log打印的不是程序当时的状态,而是之后的状态,所以系统地了解了下控制台console相关内容,不过还是没有解决问题,如有新的体会随时补充,也希望能有大神提点,感谢!

参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Console/trace
https://www.cnblogs.com/kuangke/p/5794444.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342