糯麦 NurMai

糯麦科技

/

新闻资讯

/

技术讨论

/

前端调试并非仅限于使用console.log()。

前端调试并非仅限于使用console.log()。

原创 新闻资讯

于 2023-11-29 09:13:38 发布

2238 浏览

我相信大家在日常开发中都会进行代码调试,因为谁也不能保证代码不会出现问题,所以我们需要进行debug操作,并输出信息来检查数据是否有异常。我们可能会习惯性地使用console.log('XXX')或者debugger来调试。在JavaScript中,console对象提供了许多强大的方法,使得开发者能够更灵活地进行交互。除了我们熟知的console.log之外,还有许多其他强大的方法可供我们使用。


比如console.info、console.warn和console.error,能够以不同级别输出信息,更清晰地表达代码的执行状态。console.table则可将对象数组以表格形式呈现,方便查看结构化数据。在处理性能问题时,console.time和console.timeEnd用于计算代码执行时间,而console.trace提供当前调用栈的追踪信息。


console.info、console.warn、console.error

console.info()、console.warn()、console.error():用于输出不同级别的日志信息,可以帮助我们了解代码的执行流程和可能的问题。通常用于普通日志、信息性日志、警告和错误信息的输出。如果代码中有很多个输出,控制台可能就会很混乱,这时候还可以使用console.warn()、console.error()打印出不同的信息。比如:

const a = { name: '张三', edge: 20 };
console.log('This is a log message', a.name);
console.info('This is an informational message', a.name);
console.warn('This is a warning message', a.name);
console.error('This is an error message', a.name);


console.time()、console.endTime()

有时候数据很多并且处理的逻辑还挺复杂,经过我们一番操作后总是会担心会不会很耗时,这时候就可以测试代码执行的时间,如果页面渲染过慢就能排查是不是某些逻辑写的太耗性能了。

console.time('Timer');
for (let i = 0; i < 10000; i++) {}
console.timeEnd('Timer');
console.time('Timer2');
for (let i = 0; i < 100000000; i++) {}
console.timeEnd('Timer2');


console.trace()

输出当前调用栈的追踪信息,用于查看函数的调用路径。如果想知道一个函数是何时被调用的,console.trace()就能显示函数的调用链。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      function foo() {
        console.trace('Trace message');
      }
      function test() {
        return foo();
      }
      foo();
      test();
    </script>
  </body>
</html>


console.table()

前端用数组结构还是挺多的,有时候想打印出更清晰的数据结构,就可以用console.table()了,它适用于输出对象数组的信息,以表格形式展示,有助于清晰地查看对象的属性。

<script>
const myArray = [
   { name: 'John', age: 30 },
   { name: 'Jane', age: 25 },
 ];
 console.table(myArray);
</script>


console.clear()

很多时候正在调试bug,在控制台打印信息,但控制台可能会出现一些警告或者其他报错,我们需要的信息就会不容易发现,这时候就可以使用console.clear()。清空输出了


console.assert()

断言,如果条件为 false,则输出一条错误消息。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      console.assert(1 + 3 === 5, '第一个报错了');
      console.assert(1 + 3 === 4, '第二个报错了');
    </script>
  </body>
</html>

当然还有其他的,这里就不一一举例了比如:

•  console.timeLog():输出指定计时器的当前运行时间。

•  console.profile() 和 console.profileEnd():用于性能分析,开始和结束记录分析数据。

•  console.group() 和 console.groupEnd():用于将一系列相关的日志信息分组,使输出更有组织,特别是在复杂的应用中。

web

网站开发

小程序开发

阅读排行

  • 1. 几行代码就能实现Html大转盘抽奖

    大转盘抽奖是网络互动营销的一种常见形式,其通过简单易懂的界面设计,让用户在游戏中体验到乐趣,同时也能增加商家与用户之间的互动。本文将详细介绍如何使用HTML,CSS和JavaScript来实现大转盘抽奖的功能。

    查看详情
  • 2. 温州小程序开发市场调研

    随着互联网技术的不断发展,传统市场正面临着数字化转型的挑战和机遇。温州作为中国的重要商业城市之一,其传统市场具有独特的特点和运营模式。本文将从温州传统市场的特点出发,探讨如何开发出适合温州市场的小程序系统。

    查看详情
  • 3. 微信支付商户申请接入流程

    微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如JSAPI支付、小程序支付、APP支付H5支付等支付方式接入。

    查看详情
  • 4. 微信小程序中父子组件相互调用详解

    在微信小程序中,组件化开发是一种重要的开发模式,它能够将复杂的界面拆分成多个独立的组件,使代码更容易维护和扩展。在组件化的开发中,父子组件之间的相互调用和传参是常见的需求。

    查看详情
  • 5. 浙江省同区域公司地址变更详细流程

    提前准备好所有需要的资料,包含:房屋租赁合同、房产证、营业执照正副本、代理人身份证正反面、承诺书(由于我们公司其中一区域已有注册另外一公司,所以必须需要承诺书)

    查看详情