JavaScript代码调试方法实例小结


Posted in Javascript onJanuary 05, 2019

本文实例讲述了JavaScript代码调试方法。分享给大家供大家参考,具体如下:

1 把消息记录到控制台

IE8、Firefox、Chrome 和 Safari 中可以使用 console 对象向 JavaScript 控制台写入消息,它有这些方法:

  • error(message):错误性消息。
  • info(message):信息性消息。
  • log(message):一般性消息。
  • warn(message):警告性消息。

Opera 10.5 之前的版本,是使用 opera.postError() 方法把消息写入控制台的。

可以使用下面的这个函数作为统一写入控制台的接口:

/**
 * 跨浏览器,向控制台写入消息
 * @param message
 */
function log(message) {
  if (typeof console == "object") {
    console.log(message);
  } else if (typeof opera == "object") {
    opera.postError(message);
  } else if (typeof java == "object" && typeof java.lang == "object") {
    java.lang.System.out.println(message);
  }
}

可以在浏览器中安全地使用这个函数:

function sum(num1, num2) {
  log("Entering sum(), arguments are " + num1 + "," + num2);
  log("Before calculation");
  var result = num1 + num2;
  log("After calculation");
  log("Exiting sum()");
  return result;
}

注意:在发布之前,务必移除所有的消息。这可以在部署之前,通过编写特定的代码步骤,实现自动清理。不要使用 alert(),因为弹出的警告框会阻止程序的执行;而且在测试异步操作对时间的影响时,使用警告框也会影响测试结果。

2 把消息记录到当前页面

可以在页面中开辟出一小块区域,用于显示消息:

function log(message) {
  var console = document.getElementById("debuginfo");
  if (console == null) {
    console = document.createElement("div");
    console.id = "debuginfo";
    console.style.background = "#dedede";
    console.style.border = "1px solid silver";
    console.style.padding = "5px";
    console.style.width = "400px";
    console.style.position = "absolute";
    console.style.right = "0px";
    console.style.top = "0px";
    document.body.appendChild(console);
  }
  console.innerHTML += "<p>" + message + "</p>";
}

这种技术在不支持 JavaScript 控制台的 IE7 以及早期版本中,特别有用。

注意:在发布之前,也要移除把错误消息输出到页面中的代码。

3 抛出错误

如果错误消息很具体,那么就可以直接把它当做确定错误来源的依据,比如下面的这个函数:

function divide(num1, num2){
  return num1/num2;
}

这个函数如果其中的一个参数不是数值,那么就会返回 NaN。所以可以在计算前先进行检测:

function divide(num1, num2){
  if(typeof num1 !="number" || typeof num2 !="number"){
    throw new Error("divide(): 两个参数都必须是数值")
  }
  return num1/num2;
}

这个错误消息包含了函数的名称以及导致错误的真正原因,所以如果抛出了这个错误,我们就能立即知道错误的来源以及问题的性质。

大型的应用程序,可以使用下面的这个 assert() 函数抛出自定义错误:

<script type="text/javascript">
  function assert(condition, message) {
    if (!condition) {
      throw new Error(message);
    }
  }
  function divide(num1, num2) {
    assert(typeof num1 == "number" && typeof num2 == "number", "divide():Both arguments must be numbers.");
    return num1 / num2;
  }
  divide(1,"tt");
</script>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
select组合框option的捕捉实例代码
Sep 30 Javascript
Extjs ajax同步请求时post方式参数发送方式
Aug 05 Javascript
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
jquery操作select option 的代码小结
Jun 21 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
Jul 17 Javascript
JQuery 图片滚动轮播示例代码
Mar 24 Javascript
当jquery ajax遇上401请求的解决方法
May 19 Javascript
如何实现json数据可视化详解
Nov 24 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
Jan 13 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
Jan 16 Javascript
canvas时钟效果
Feb 16 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 Javascript
JavaScript实现连连看连线算法
Jan 05 #Javascript
JavaScript错误处理操作实例详解
Jan 04 #Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 #Javascript
JavaScript解析及序列化JSON的方法实例分析
Jan 04 #Javascript
Node.js操作系统OS模块用法分析
Jan 04 #Javascript
Node.js console控制台简单用法分析
Jan 04 #Javascript
Node.js JSON模块用法实例分析
Jan 04 #Javascript
You might like
Home Coffee Roasting
2021/03/03 咖啡文化
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
Python 错误和异常小结
2013/10/09 Python
浅谈python迭代器
2017/11/08 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
Python3 翻转二叉树的实现
2019/09/30 Python
基于Django实现日志记录报错信息
2019/12/17 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
python与idea的集成的实现
2020/11/20 Python
大学生的创业计划书就该这么写
2014/01/30 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
职称评定个人总结
2015/03/05 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
Redis如何实现分布式锁
2021/08/23 Redis