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框架myJSFrame附API使用帮助
Jun 28 Javascript
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
基于jquery完美拖拽,可返回拖动轨迹
Mar 29 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
Dec 04 Javascript
jQuery内置的AJAX功能和JSON的使用实例
Jul 27 Javascript
JS数组合并push与concat区别分析
Dec 17 Javascript
Javascript实现单例模式
Jan 24 Javascript
js实现tab切换效果
Feb 16 Javascript
JavaScript实现简单的星星评分效果
May 18 Javascript
vuex的简单使用教程
Feb 02 Javascript
Vue 重置组件到初始状态的方法示例
Oct 10 Javascript
详解vue 组件注册
Nov 20 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
yii实现级联下拉菜单的方法
2014/07/31 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
Django框架下在视图中使用模版的方法
2015/07/16 Python
python运行其他程序的实现方法
2017/07/14 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
Python3爬虫学习入门教程
2018/12/11 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
上课迟到检讨书
2014/01/19 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
公司催款律师函
2015/05/27 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
python脚本框架webpy的url映射详解
2021/11/20 Python
APP界面设计技巧和注意事项
2022/04/29 杂记
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS