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实现黑色风格的网页TAB选项卡效果代码
Oct 09 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
JS限制条件补全问题实例分析
Dec 16 Javascript
JS瀑布流实现方法实例分析
Dec 19 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
VueJs路由跳转——vue-router的使用详解
Jan 10 Javascript
js移动端事件基础及常用事件库详解
Aug 15 Javascript
微信小程序实现图片上传功能
May 28 Javascript
vue中引用swiper轮播插件的教程详解
Aug 16 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
Jul 20 Javascript
js实现表格数据搜索
Aug 09 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二分查找二种实现示例
2014/03/12 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
vue.js表格分页示例
2016/10/18 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
python读取二进制mnist实例详解
2017/05/31 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
python实现XML解析的方法解析
2019/11/16 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Python bisect模块原理及常见实例
2020/06/17 Python
python解包用法详解
2021/02/17 Python
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
普天C++笔试题
2016/03/20 面试题
手机业务员岗位职责
2013/12/13 职场文书
学习党章思想汇报
2014/01/07 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
培训协议书范本
2014/04/22 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
centos8安装MongoDB的详细过程
2021/10/24 MongoDB