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 相关文章推荐
JS与框架页的操作代码
Jan 17 Javascript
js两行代码按指定格式输出日期时间
Oct 21 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
May 10 Javascript
vue.js语法及常用指令
Oct 29 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
小程序云开发如何实现图片上传及发表文字
May 17 Javascript
vue监听滚动事件的方法
Dec 21 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
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
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
Windows环境下python环境安装使用图文教程
2018/03/13 Python
django框架两个使用模板实例
2019/12/11 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
keras打印loss对权重的导数方式
2020/06/10 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
优秀团员个人的自我评价
2013/10/02 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
国际会计专业求职信
2014/08/04 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
Java并发编程必备之Future机制
2021/06/30 Java/Android
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫