zoukankan      html  css  js  c++  java
  • Javascript高级之console调试

    JS错误处理

    • 错误类型

      • Error - 表示普通错误,其余6种类型的错误对象都继承自该对象
      • EvalError - 调用eval()函数错误,已经弃用,为了向后兼容,低版本还可以使用
      • RangeError - 数值超出有效范围,如"new Array(-1)"
      • ReferenceError - 引用了一个不存在的变量,如"var a=1;a+b;"(变量b未定义)
      • SyntaxError - 解析过程语法错误,如"{;}" "if()" "var a=new;"
      • TypeError - 变量或参数不是预期类型,如调用了不存在的函数或方法
      • URIError - 解析URI编码出错,调用encodeURI()、escape()等URI处理函数时出现
    • 错误处理:发生错误时,保证程序不中断

        try{
            可能发生错误的代码
        }catch(err){//err中发生错误时会自动收到创建的error对象
            err.message: 保存了错误的详细原因
            err.name: 保存了错误对象的名称
        如果发生错误,才执行的错误处理代码
        }[finally{
        无论是否发生错误,都执行的代码
            *一定会在退出*之前*执行*
            一般释放用过的对象资源:xxx=null
        }]
    
    • 手动抛出错误对象
        try{
            // 创建错误对象
            var err = new Error('自定义错误信息');
            // 抛出错误对象
            // 也可以与上一行合并为:throw new Error('自定义错误信息');
            throw err;
        }catch(err){
            // 输出结果,自定义错误信息
            console.log(err.message);
        }
    
    • 执行效率
      • 如果可以提前预知错误的原因:建议使用if代替try catch
      • try中尽量少的包含代码,try的执行效率低,且多创建一个error对象

    Source面板调试

    • Source面板调试工具
      • Watch - 可以对加入监听列表的变量进行监听
      • Call Stack - 函数调用堆栈,可以在代码暂停时查看执行路径
      • Scope - 查看当前断点所在函数执行的作用域内容
      • Breakpoints - 查看断点列表
      • XHR Breakpoints - 请求断点列表,可以对满足过滤条件的请求进行断点拦截
      • DOM Breakpoints - DOM断点列表,设置DOM断点后满足条件时触发断点
      • Global Listeners - 全局监听列表,显示绑定在window对象上的事件监听
      • Event Listener Breakpoints - 可断点的事件监听列表,可以在触发事件时进入断点

    JS中的console对象

    • 概述
      • JavaScript中的console对象可用于访问浏览器调试控制台
      • 可以用它在控制台中输出代码中变量的值

    console对象

    console.log()

    • 说明
      • 这个方法主要用于将传给它的值输出到控制台
      • 可以给log()传递任何类型
        • 字符串
        • 数组
        • 对象
        • 布尔值
        • ...
    console.log('JavaScript');
    console.log(7);
    console.log(true);
    console.log(null);
    console.log(undefined);
    console.log([1, 2, 3]);
    console.log({a: 1, b: 2, c: 3});
    

    console.info()

    • 说明
      • console.log 别名,输出信息
    console.info("runoob");
    

    console.error()

    • 说明
      • 这个方法在测试代码时非常有用
      • 它用于将错误输出到浏览器控制台
      • 错误消息默认用红色突出显示
    console.error('Error found');
    

    console.warn()

    • 说明
      • 这个方法用于向控制台抛出警告
      • 警告消息默认以黄色突出显示
    console.warn('Warning!');
    

    console.clear()

    • 说明
      • 这个函数用来清除控制台
      • 如果控制台中充满了消息和错误信息,可以用它清除控制台
      • 并在控制台中显示一条消息:Console was cleared
    console.clear()
    

    console.trace()

    • 说明
      • 追踪函数的调用过程
    function d(a) { 
      console.trace();
      return a;
    }
    function b(a) { 
      return c(a);
    }
    function c(a) { 
      return d(a);
    }
    var a = b('123');
    

    console.assert()

    • 说明
      • assert方法接受两个参数,第一个参数是表达式,第二个参数是字符串
      • 只有当第一个参数为false,才会输出第二个参数,否则不会有任何结果
    console.assert(true === false, "判断条件不成立")
    // Assertion failed: 判断条件不成立
    

    console.time() 与 console.timeEnd()

    • 说明
      • 这两种方法要相互结合使用
      • 每当我们想知道一个代码块或函数所花费的时间时,都可以用time()timeEnd()方法
      • 这两个函数都以字符串作为参数
      • 使用时要对这两个函数用相同的字符串来测量时间
    console.time('timer'); 
    const hello =  function(){
      console.log('Hello Console!');
    }
    const bye = function(){
      console.log('Bye Console!');
    }
    hello(); // calling hello();
    bye(); // calling bye();
    console.timeEnd('timer');
    

    console.table()

    • 说明
      • 这个方法可以在控制台中生成一个表格,能够提高可读性
      • 它可以自动为数组或对象生成一个表
    console.table({a: 1, b: 2, c: 3}); 
    

    console.count()

    • 说明
      • 可以在循环中用它来检查特定的值使用了多少次
    for(let i=0; i<3; i++){
      console.count(i);
    }
    

    console.group() 和 console.groupEnd()

    • 说明
      • group()groupEnd()可以让我们把内容分组到一个单独的块中
      • 就像time()timeEnd()一样,它们需要以相同值的标签作为参数
      • 你还可以对组执行展开或折叠操作
    console.group('group1'); 
      console.warn('warning'); 
      console.error('error'); 
      console.log('I belong to a group'); 
    console.groupEnd('group1'); 
    console.log('I dont belong to any group');
    

    为你的日志添加样式

    • 说明
      • 还可以在控制台日志添加样式,使日志看起来更漂亮
      • 只需要把CSS样式作为log()函数的第二个参数,同时第一个参数以%c开始即可
    const spacing = '10px'; 
    const styles =  `padding: ${spacing}; background-color: white; color: red; font-style: italic; border: 1px solid black; font-size: 2em;`; 
    console.log('%cI am a styled log', styles);
    

    占位符格式

    • console支持printf的占位符格式
      • %s 字符串
      • %d or %i 整数
      • %f 浮点数
      • %o 可展开的DOM
      • %O 列出DOM的属性
      • %c 根据提供的css样式格式化字符串

    字符串

    console.log("%d年%d月%d日",2020,12,26);
    // 2020年12月26日
    

    Object对象

    • 说明

      • %o、%O都是用来输出Object对象的
      • 对普通的Object对象,两者没区别,但是打印DOM节点时就不一样了
    • %o 可展开的DOM

      • 格式成可展开的的DOM,像在开发者工具Element面板那样可展开
    console.log('%o',document.body.firstElementChild); 
    
    • %O 列出DOM的属性
      • 像JS对象那样访问DOM元素,可查看DOM元素的属性
      • 等同于console.dir(document.body.firstElementChild)
    console.log('%O',document.body.firstElementChild);
    

    CSS渲染

    • 说明
      • 使用%c占位符时,对应的后面的参数必须是CSS语句,用来对输出内容进行CSS渲染
      • 常见的输出方式有两种:文字样式、图片输出
      • console 不支持 width 和 height,利用空格和 font-size 代替
      • 还可以使用 padding 和 line-height 代替宽高
      • 输出面板一样的字符画
        • 由于 console 不能定义 img,因此用背景图片代替
        • 网址:
          • http://www.network-science.de/ascii/
          • https://www.degraeve.com/img2txt.php
        • 说明
          • console输出默认是不换行的
    console.log("%c蜀山记","color: red; font-size: 20px"); 
    
    console.log("%c","background:url(https://static.runoob.com/images/runoob-logo.png) no-repeat;padding:50px 300px;line-height:120px");
    

    信息分组

    console.group("第一组信息");
      console.log("第一组第一条");
      console.log("第一组第二条");
    console.groupEnd();
      
    console.group("第二组信息");
      console.log("第二组第一条");
      console.log("第二组第二条");
    console.groupEnd();
    

    查看对象的信息

    var info = {
      site:"http://www.baidu.com",
      name:"风和日丽"
    };
    console.dir(info);
    

    显示某个节点的内容

    • 说明
      • console.dirxml()用来显示网页的某个节点(node)所包含的html/xml代码。
    <div id="info">
      <h3>风和日丽</h3>
      <p>学的不仅是技术,更是梦想!</p>
    </div>
    <script type="text/javascript">
      var info = document.getElementById('info');
      console.dirxml(info);
    </script>
    

    判断变量是否是真

    • 说明
      • console.assert()用来判断一个表达式或变量是否为真
      • 如果结果为否,则在控制台输出一条相应信息,并且抛出一个异常
    var result = 1;
    console.assert( result );
    var year = 2014;
    console.assert(year == 2018 );
    

    追踪函数的调用轨迹

    • 说明
      • console.trace()用来追踪函数的调用轨迹
    /*函数是如何被调用的,在其中加入console.trace()方法就可以了*/
    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);}
    

    计时功能

    • 说明
      • console.time() 和 console.timeEnd(),用来显示代码的运行时间
    console.time("控制台计时器一");
    for(var i=0;i<1000;i++){
      for(var j=0;j<1000;j++){}
    }
    console.timeEnd("控制台计时器一");
    

    console.profile() 的性能分析

    • 说明
      • 性能分析(Profiler)就是分析程序各个部分的运行时间,找出瓶颈所在,使用的方法是 console.profile()
    function All() {
      alert(1);
      for (var i = 0; i < 10; i++) {
        funcA(1000);
      }    
      funcB(10000);  
    }
    function funcA(count) {    
      for (var i = 0; i < count; i++) {}  
    }
    function funcB(count) {    
      for (var i = 0; i < count; i++) {}  
    }
    console.profile('性能分析器');
    All();  
    console.profileEnd();
    
  • 相关阅读:
    .net面试--值类型和引用类型
    Centos7下安装Docker(详细的新手装逼教程)
    C# 开源框架(整理)
    service配置文件
    kafka消息队列、环境搭建与使用(.net framework)
    消息队列
    并发、并行、同步、异步、多线程的区别
    破解studio 3T
    HM后台(二)
    HM后台(一)
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14140545.html
Copyright © 2011-2022 走看看