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实现代码
Dec 03 Javascript
用客户端js实现带省略号的分页
Apr 27 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
Aug 06 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
JS实现队列与堆栈的方法
Apr 21 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
实现easyui的datagrid导出为excel的示例代码
Nov 10 Javascript
js数据类型检测总结
Aug 05 Javascript
模块化react-router配置方法详解
Jun 03 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
vue实现输入一位数字转汉字功能
Dec 13 Javascript
nuxt 每个页面head标签内容设置方式
Nov 05 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 可阅读随机字符串代码
2010/05/26 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php ci框架验证码实例分析
2013/06/26 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
js中生成map对象的方法
2014/01/09 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
用Python编写简单的定时器的方法
2015/05/02 Python
python用post访问restful服务接口的方法
2018/12/07 Python
python中的tcp示例详解
2018/12/09 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
如何用Python 加密文件
2020/09/10 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
美国著名手表网站:Timepiece
2017/11/15 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
JNI的定义
2012/11/25 面试题
英文版区域经理求职信
2013/10/23 职场文书
一年级语文教学反思
2014/02/13 职场文书
客服专员岗位职责
2015/02/10 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
活动经费申请报告
2015/05/15 职场文书
父亲去世追悼词
2015/06/23 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python