前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编写可维护代码3:适当的抛出错误提示

编写可维护代码3:适当的抛出错误提示

作者头像
前端_AWhile
发布2019-08-29 14:51:12
1K0
发布2019-08-29 14:51:12
举报
文章被收录于专栏:前端一会

编写可维护的代码规则第3篇。

在js开发中,调试错误是一个比较头疼的事,又不像java的debug那么方便,定位错误往往不是那么容易,除非对代码熟悉无比,但即使是自己写的代码,功能一复杂,时间一长,再想快速定位问题,至少我现在是比较头疼的。此时,如果有一个比较友好的错误提示,那解决问题的效率将大大提高。

所以是时候学会在合适的地方抛出错误提示了。

js中抛出错误的方法有两种:throw new Error()抛出错误和try...catch..捕获错误。

先来看throw new Error()

代码语言:javascript
复制
function getDiv(el){
    if(el && el.getElementsByTagName){
        return el.getElementsByTagName('div');
    }else {
        throw new Error('getDiv(): Argument must be a Dom Element.')
    }
}
var div = document.getElementById('div1');
getDiv(null);   // Uncaught Error: getDiv(): Argument must be a Dom Element.

上例打印结果可知,明确给出了方法调用的错误提示。当getDiv()方法的参数传入不符合要求时,就会抛出错误提示。

Error类型在所有的javascrit实现中都是有效的,它的构造器只接收一个参数,即错误消息。当以这种方式抛出错误时,如果没有经try-catch语句来捕获的话,浏览器通常直接在控制台显示错误消息字符串。

通常在抛出的错误提示字符串中,应尽量写清错误目标和原因。这样做,当实际调试时,能明确告诉开发者问题的定位。

那什么时候需要抛出错误呢?

  • 修复一个自认为较复杂的错误后,及时增加相应的自定义错误提示。
  • 写代码时,思考不想要发生的程序时,针对这个不想要发生的事,抛出错误提示。

再来看下try-catch语句:

代码语言:javascript
复制
try {
    throw new Error("wrong msg.");
} catch(err) {
    console.log('catch msg: ' + err);
} finally {
    console.log('finally msg.');
}

try块中发生错误时,程序立即停止执行,并跳转到catch块中,并传入一个错误对象。至于后面的finally块,不管前面是否有错误发生,最终都会执行。

最后再来看看常见的错误类型。

  • Error:所有错误的基本类型,实际上引擎从不会抛出该类型的错误
  • EvalError:通过eval()函数执行代码发生错误时抛出
  • RangerError:一个数字超出它的边界时抛出,比较罕见
  • ReferenceError:期望的对象不存在时抛出,如试图在一个null对象引用上调用一个函数。
  • SyntaxError:给eval()函数传递的代码中有语法错误时抛出
  • TypeError:变量不是期望类型时抛出。如 new 10"prop" in true
  • URIError:给encodeURI()encodeURIComponent()decodeURIdecodeURIComponent()等函数传递格式非法的URI字符串时抛出

-------------------------------- 热门文章 --------------------------------

设计模式>>>

javascript设计模式一: 单例模式

javascript设计模式二:策略模式

javascript设计模式三:代理模式

javascript设计模式四:迭代器模式

javascript设计模式五:原型模式

javascript设计模式六:发布-订阅模式(观察者模式)

javascript设计模式七:模板方法模式

javascript设计模式八:职责链模式

javascript设计模式九:中介者模式

javascript设计模式十:装饰者模式

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档