一:错误捕获

1.try-catch 语句(错误捕获)

try{

  //这里放置可能出现问题的代码

}catch(error){

  //错误发生时执行的代码

  console.log(error.name)    //打印错误类型

  console.log(error.message)  //打印错误消息

}

说明:如果try中的代码出现任何错误,就会立即退出代码执行过程,接着执行catch块。执行过catch块之后,浏览器默认错误已经处理。

2.finally 字句

try{

}catch(error){

}finally{

}

 说明:无论try里面的语句有没有报错,catch里面的语句有没有执行到,都会执行finally语句

例:

function test(){
try{
return 1
}catch(error){
return 2
}finally{
return 0
}
}
执行test函数,始终会返回0 因为最终都会执行finally块。

3.错误类型

  Error:基类型,所有错误都继承该类型

  EvalError:使用eval()函数(该函数可以执行js代码语句)异常时候抛出。通常是没有直接调用该函数会导致该错误

  RangeError:数值超出相应范围触发   例如:定义一个长度为 -20  位的数组   var array = new Array(-20)

  ReferenceError:找不到对象时触发  例如:var obj = x  在变量x未定义的情况下 抛出错误

  SyntaxError:传入eval()函数的代码出现错误时抛出

  TypeError:最常见,执行特定类型的操作时,变量的类型不符合要求导致   例如:访问不存在的方法、变量中保存着意外的类型

总结:什么时候试用try-catch语句捕获错误?

  通常在大型的项目中,或者使用别人的库,源代码不能修改  处理那些我们无法控制的错误。

  当你明确自己的代码在何时何地会出现什么错误,使用try-catch语句就不太合适了

二:错误抛出

1.throw    使用throw 操作符代码会立即停止执行,除非使用try-catch捕获错误

基本语法  throw new Error('您要自定义的错误信息')    throw new TypeError()...................

自定义错误类型

function MyError(message){
this.name = MyError
this.message = message
} MyError.prototype = new Error() //继承Error 因为Error是所有错误类型的基类 使用:throw new MyError('我自己定义的错误类型')  

完整案例:

function test(array){
if(!(array instanceof Array)){
throw new Error('参数不是数组')
}
array.sort();
for(var i = 0;i<array.length;i++){
if(array[i]>100){
return array[i];
}
}
return -1;
}; 执行该函数需要传递一个数组类型的参数
首先验证参数是不是数组,如果不是数组则抛出错误

总结:捕获错误的目的为了防止浏览器以默认的行为处理错误,抛出错误的目的是可以获取详细具体的错误信息

js基础——错误处理的更多相关文章

  1. js基础篇——call/apply、arguments、undefined/null

    a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...

  2. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  3. JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象

       前   言 絮叨絮叨 这里是JS基础知识集中讲解的第三篇,也是最后一篇,三篇JS的基础,大多是知识的罗列,并没有涉及更难得东西,干货满满!看完这一篇后,相信许多正在像我一样正处于初级阶段的同学, ...

  4. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  5. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

  6. js基础梳理-如何理解作用域和作用域链?

    本文重点是要梳理执行上下文的生命周期中的建立作用域链,在此之前,先回顾下关于作用域的一些知识. 1.什么是作用域(scope)? 在<JavaScritp高级程序设计>中并没有找到确切的关 ...

  7. 原生JS 基础总结

    0. 好习惯 分号 ; 花括号 {}, var 弄清楚 null , undefined 区别 , isNaN, === 与 == 区别 1. prompt , confirm , alert 不同框 ...

  8. GSAP JS基础教程--TweenLite操作元素的相关属性

    今天来学习用TweenLite操作元素的各种属性,以Div为例,其他元素的操作也是一样的,只是可能一些元素有它们的特殊属性,就可能不同罢了.   代码里用详细注释,我就不再重复啦,大家看代码就可以啦! ...

  9. 进击Node.js基础(二)

    一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...

随机推荐

  1. CentOS 7 离线环境安装nginx时报错:./configure: error: C compiler cc is not found

    先说解决方法: 在nginx目录下,查看objs/autoconf.err文件,该文件记录了具体的错误信息 vi objs/autoconf.err 一般就是缺少一些文件,因为我的gcc.g++也是离 ...

  2. 自定义Metadata验证属性

    一.定义 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  3. springcloud Config 入门,带视频

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy ...

  4. Linux ipv6 无状态 设置为 eui64

    Linux ipv6 无状态 设置为 eui64 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22. 无状态的ipv6有eui64和stable-privacy模式, 在家 ...

  5. nginx和swoole怎么混合使用

    有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群​jq.qq.com 基于epoll的Nginx 有了epoll,理论上1个进程就可以 ...

  6. IPFS学习-DNS链接

    DNSLink 什么是DNS链接 DNS链接使用DNS TXT记录映射域名(如ipfs.io)到一个IPFS地址.因为你可以编辑自己的DNS记录,可以使他们总是指向最新版本的IPFS中的对象(如果修改 ...

  7. 关于c#winform用sharpGL(OpenGL)绘制不出图形,绘制窗口是个黑框的坑

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11790309.html 在c++的opengl中可能是因为是最基本的库,很多东西都把你做好了 ...

  8. git常用情景和基础命令

    git常用情景和基础命令 将项目克隆到本地 --xxx是git的地址 git clone xxxx 或者初始化git(github提供滴) --新建一个readme.md文件 echo "# ...

  9. logback日志文件位置动态指定

    logback日志文件位置动态指定 参考:https://stackoverflow.com/questions/19518843/logback-configuration-via-jvm-argu ...

  10. Ligg.WinOa-000: Windows运维自动化编程实战--前言

        本开源项目Ligg.WinOa是一个基于Ligg.EasyWinApp的Windows运维自动化应用.通过Ligg.EasyWinForm生成2个功能界面:管理员工具箱和用户工具箱:通过Lig ...