记住使用哪个日志方法(原生的console.log()和自定义的log()方法),对开发者来说是一种负
担。因为console 是一个全局对象,所以可以为这个对象添加方法,也可以用自定义的函数重写已有
的方法,这样无论在哪里用到的日志打印方法,都会按照自定义的方式行事。
比如,可以这样重新定义console.log 函数:
// 把所有参数拼接为一个字符串,然后打印出结果
console.log = function() {
// ‘arguments’并没有join 方法,这里先把它转换为数组
const args = Array.prototype.slice.call(arguments);
console.log(args.join(’, '));
}
这样,其他代码调用的将是这个函数,而不是通用的日志方法。这样的修改在页面刷新后会失效,
因此只是调试或拦截日志的一个有用而轻量的策略。
抛出错误
如前所述,抛出错误是调试代码的很好方式。如果错误消息足够具体,只要看一眼错误就可以确定
原因。好的错误消息包含关于错误原因的确切信息,因此可以减少额外调试的工作量。比如下面的函数:
function divide(num1, num2) {
return num1 / num2;
}
这个简单的函数执行两个数的除法,但如果任何一个参数不是数值,则返回NaN。当Web 应用程序
意外返回NaN 时,简单的计算可能就会出问题。此时,可以检查每个参数的类型是不是数值,然后再进
行计算。来看下面的例子:
function divide(num1, num2) {
if (typeof num1 != “number” || typeof num2 != “number”){
throw new Error(“divide(): Both arguments must be numbers.”);
}
return num1 / num2;
}
这里,任何一个参数不是数值都会抛出错误。错误消息中包含函数名和错误的具体原因。当浏览器
报告这个错误消息时,你立即就能根据它包含的信息定位到问题,包括问题的解决方案。相对于没那么
具体的浏览器错误消息,这个错误消息显示更有价值。
在大型应用程序中,自定义错误通常使用assert()函数抛出错误。这个函数接收一个应该为true
的条件,并在条件为false 时抛出错误。下面是一个基本的assert()函数:
function assert(condition, message) {
if (!condition) {
throw new Error(message);
}
}
这个assert()函数可用于代替多个if 语句,同时也是记录错误的好地方。下面的代码演示了如
何使用它:
function divide(num1, num2) {
assert(typeof num1 == “number” && typeof num2 == “number”,
“divide(): Both arguments must be numbers.”);
return num1 / num2;
}
相比于之前的例子,使用assert()函数可以减少抛出自定义错误所需的代码量,并且让代码更好
理解。
javascript基础从小白到高手系列一千二百零三:补充控制台方法
最新推荐文章于 2024-08-21 14:09:37 发布