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 相关文章推荐
JQuery打造PHP的AJAX表单提交实例
Nov 03 Javascript
初识javascript 文档碎片
Jul 13 Javascript
使用js实现雪花飘落效果
Aug 26 Javascript
浅析jquery的作用与优势
Dec 02 Javascript
node.js中的http.request.end方法使用说明
Dec 10 Javascript
浅谈js中的闭包
Mar 16 Javascript
JS留言功能的简单实现案例(推荐)
Jun 23 Javascript
layui table 参数设置方法
Aug 14 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
js canvas实现星空连线背景特效
Nov 01 Javascript
node省市区三级数据性能测评实例分析
Nov 06 Javascript
微信小程序wxml列表渲染原理解析
Nov 27 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
基于php权限分配的实现代码
2013/04/28 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
javascript 特殊字符串
2009/02/25 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
Python字符遍历的艺术
2008/09/06 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python实现的堆排序算法示例
2018/04/29 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python 如何将office文件转换为PDF
2020/09/22 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
《再别康桥》教学反思
2014/02/12 职场文书
大班亲子运动会方案
2014/06/10 职场文书
读群众路线的心得体会
2014/09/03 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
师德承诺书
2015/01/20 职场文书
2016年校长新年寄语
2015/08/17 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
vue3获取当前路由地址
2022/02/18 Vue.js