”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 掌握 JavaScript 调试:新手必备的技巧

掌握 JavaScript 调试:新手必备的技巧

发布于2024-11-03
浏览:874

Mastering JavaScript Debugging: est Techniques for Newbie

JavaScript 中的调试涉及通过分析运行时行为、跟踪程序流程以及使用浏览器控制台、调试器和日志记录技术等工具来识别和修复错误。以下是 JavaScript 中调试的各种方法。
1.使用调试器关键字
debugger 关键字强制 JavaScript 引擎在某个点停止执行。当遇到时,它会暂停代码执行并打开浏览器的调试工具。
句法:
调试器;
例子:

function sum(a, b) { 
   debugger; // Execution stops here 
   return a   b; 
} 

let result = sum(5, 10); 
// When run, code will pause at the debugger line

这允许您使用浏览器的开发人员工具检查此时的变量和程序状态。
2.使用 console.log()
console.log() 将数据输出到浏览器的控制台,帮助您在运行时跟踪值和程序流程。
句法:

console.log(value)
Example:
let name = "John"; 
let age = 30; 

console.log("Name: "   name); 
// Output: Name: John 
console.log("Age: ", age); 
// Output: Age: 30

通过在代码中放置 console.log() 语句,您可以验证变量是否包含预期值。
3.使用断点
可以直接在浏览器的开发人员工具中设置断点。它们在特定行停止代码执行,允许您检查当时的程序状态。
设置断点的步骤:

  1. 打开开发者工具(按 F12 或右键单击并选择“检查”)。
  2. 转到“来源”选项卡。
  3. 选择 JavaScript 文件,然后单击行号设置断点。
  4. 代码执行将在该行暂停,并且可以检查所有变量和状态。 例子:
function multiply(a, b) { 
   return a * b; 
} 

令结果 = 乘法(2, 5);
// 在这里设置断点并检查值
在此示例中,在 multiply() 函数上设置断点后,您可以在开发工具中检查 a 和 b 的值。
4.使用 console.warn() 和 console.error()
这些方法的工作方式类似于 console.log(),但输出在控制台中在视觉上是不同的,有助于区分警告或错误。
句法:

console.warn(message); 
console.error(message);

例子:

let age = 17; 

if (age 



在这种情况下,console.warn() 将显示黄色警告消息,而 console.error() 将显示红色错误。
5.使用 try...catch 语句
try…catch 用于优雅地处理运行时错误,允许您记录错误并防止应用程序崩溃。
句法:

try { 
   // Code that may throw an error 
} catch (error) { 
   console.error(error.message); 
} 

例子:

 try { 
   let result = JSON.parse("invalid JSON string"); 
} catch (error) { 
   console.error("An error occurred: ", error.message); 
   // Logs error without stopping the app 
}

try…catch 块将捕获 JSON 解析错误并将其记录到控制台,而不会导致应用程序崩溃。
6。使用性能监控工具
对于性能调试,开发人员工具中的“性能”选项卡可帮助监控函数执行时间、内存使用情况和性能瓶颈。
步骤:

  1. 打开开发者工具(按 F12)。
  2. 转到“性能”选项卡。
  3. 点击Record开始监控代码执行。
  4. 在您的应用程序中执行操作以收集数据。
  5. 停止录制以分析性能时间线。 例子:
console.time("loop"); 
for (let i = 0; i 



此示例使用 console.time() 和 console.timeEnd() 来测量执行一段代码所需的时间。
通过应用这些方法和性能监控等更先进的技术,您可以有效地调试和解决 JavaScript 代码中的问题。

如果您正在学习 JavaScript,请务必遵循我在 Medium 上的分步教程:https://medium.com/@CodingAdventure

版本声明 本文转载于:https://dev.to/emma_richardson/mastering-javascript-debugging-6-best-techniques-for-newbie-52bp?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-26
  • 在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8表中将latin1字符转换为utf8 ,您遇到了一个问题,其中含义的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致电。The recommended approach to correct the data is t...
    编程 发布于2025-04-26
  • input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It?

output: 解决“Warning: mysqli_query() 参数应为 mysqli 而非 resource”错误的解析与修复方法
    input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It? output: 解决“Warning: mysqli_query() 参数应为 mysqli 而非 resource”错误的解析与修复方法
    mysqli_query()期望参数1是mysqli,resource给定的,尝试使用mysql Query进行执行MySQLI_QUERY_QUERY formation,be be yessqli:sqli:sqli:sqli:sqli:sqli:sqli: mysqli,给定的资源“可能发...
    编程 发布于2025-04-26
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-04-26
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-04-26
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-04-26
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-04-26
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-04-26
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-26
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-04-26
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-04-26
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-26
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-26
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-04-26
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确预期操作结果的火灾和...
    编程 发布于2025-04-26

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3