JavaScript基础-错误处理Throw、Try、Catch

  • try语句执行可能出错的代码
  • catch语句处理捕捉到的错误
  • throw语句创建自定义错误语句

    发生的常见的错误类型

  • 可能是语法错误,可能是编码错误或者拼写错误
  • 可能是拼写错误或者语言中出现错误(也许是浏览器的差异导致的代码不兼容)
  • 还有可能是由于用户的操作引起的错误
  • 当然还能是由于各种其他不可预知的问题

    JavaScript抛出错误

  • 当错误发生时,当JavaScript引擎出现错误时会停止,并生成一个错误报告
  • 描述这种情况的技术术语是:JavaScript将抛出一个错误

    JavaScript测试与捕获

  • try语句允许我们执行在运行时进行错误测试的代码
  • catch语句允许我们在JavaScript出错时所执行的代码块
  • try语句和catch语句总是成对出现的

    例如:

<!DOCTYPE html>
<html>
<head>
<script>
var txt="";
function message()
{
try
  {
  adddlert("Welcome guest!");
  }
catch(err)
  {
  txt="There was an error on this page.\n\n";
  txt+="Error description: " + err.message + "\n\n";
  txt+="Click OK to continue.\n\n";
  alert(txt);
  }
}
</script>
</head>

<body>
<input type="button" value="View message" onclick="message()">
</body>
</html>

throw语句

  • throw语句允许我们创建自定义错误
  • 常见的术语是:创建或者抛出异常(exception)
  • 把throw和try还有catch一起使用可以控制程序流,创建自定义的错误
  • 语法是:throw exception
  • 抛出的对象可以使字符串、数字、逻辑值和对象
<script>
function myFunction()
{
try
  {
  var x=document.getElementById("demo").value;
  if(x=="")    throw "empty";
  if(isNaN(x)) throw "not a number";
  if(x>10)     throw "too high";
  if(x<5)      throw "too low";
  }
catch(err)
  {
  var y=document.getElementById("mess");
  y.innerHTML="Error: " + err + ".";
  }
}
</script>

<h1>My First JavaScript</h1>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="mess"></p>

使用try-catch-finally

finally里面的语句一定会执行,即使try-catch没有执行,finally最终都会执行的,即使是return返回语句

<!DOCTYPE html>
<html>
<head>
<script>
window.onload = function(){
    try{
        var x = document.getElementById("hello");
        if(!x) throw "this is object is gone!";
    }catch(err){
        alert(err+" "+typeof err);
    }finally{
        console.log("这里的代码终究都是执行的!");
    }
}

</script>
</head>
<body>
</body>
</html>

函数中有try-catch-finally时候的返回机制

  • 一般在函数内部遇见return直接就停止执行函数直接结束
  • 但是假如函数内部有finally即使try中已经执行了return,若是finally中有return的话,还是按照finally的算

    错误类型的总结(准确分析错误类型,获取更多错误信息)

  • Error,基类型,其他的错误都是继承自该错误的,因此其他错误都共享了一组相同的属性
  • Eval错误,EvalError,是在使用eval()函数时被抛出的错误
  • 范围错误,RangeError,数值超出一定范围时会抛出

    var a=new Array(-10);//Uncaught RangeError: Invalid array length
  • 变量引用错误,ReferenceError,找不到引用对象时会报出这个错误,通常出现在访问不存在的变量时会发生
  • SyntaxError语法错误,表示出现语法错误
  • TypeError变量类型不符
  • URIError,在使用encodeURL()和decodeURL()时会出现这个错误

错误类型的处理,使用instanceof进行检测

<!DOCTYPE html>
<html>
<head>
<script>
function typeError(){
    try{
        var x = document.querySelects("body");
    }catch(err){
        if(err instanceof TypeError){
            console.log("类型错误");
        }
        else if(err instanceof ReferenceError){
            console.log("引用错误");
        }
        else if(err instanceof RangeError){
            console.log("范围错误");
        }
        else if(err instanceof SyntaxError){
            console.log("语法错误");
        }
        else if(err instanceof TypeError){
            console.log("类型错误");
        }else{
            console.log("其他错误!");
        }
    }
}
typeError();
</script>
</head>
<body>
</body>
</html>

throw抛出的不同的对象类型最常用的是:Error通用类型、范围错误RangeError,变量引用错误ReferenceError、变量类型错误TypeError

throw  new Error("抛出通用错误");//Uncaught Error: 抛出通用错误
throw  new Error(抛出通用错误);//Uncaught ReferenceError,抛出通用错误 is not defined;
throw new SyntaxError("SyntaxError语法错误");
throw new RangeError("RangeError范围错误");
throw new ReferenceError("ReferenceError变量引用错误");
throw new TypeError("TypeError变量类型错误");

注意:构造错误的时候需要给错误信息加上引号,错误信息其实就是string

除了window的Error对象还有错误事件对象

window.onerror = function(message,url,line){   //带有message,url和行号
    alert(message);
}

JavaScript基础——兼容性、错误处理的更多相关文章

  1. JavaScript基础——添加错误处理

    JavaScript编程的一个重要组成部分,是添加错误处理来应对可能会出现的问题.默认情况下,如果因为你的JavaScript中的问题二产生了一个代码异常,那么脚本就会失败并且无法完成加载.这通常不是 ...

  2. 2016.3.17__ JavaScript基础_1__第十二天

    Javascript基础 首先说声抱歉. 今日涉及内容难易度不统一,所以很多比較基础的属性直接通过思维导图展示了. 同一时候须要注意,今日思维导图中的内容和笔记中并非一一相应的,请读者自行对比查看. ...

  3. javascript基础入门知识点整理

    学习目标: - 掌握编程的基本思维 - 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔 ...

  4. JavaScript基础语法资料

    JavaScript基础第01天 1 - 编程语言 1.1 编程 编程: 就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机程序: 就是计算机所执行的一系列的 ...

  5. JavaScript基础

    JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...

  6. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  7. 前端之JavaScript基础

    前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...

  8. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  9. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

随机推荐

  1. UVA - 140 Bandwidth(带宽)(全排列)

    题意:给定图,求是带宽最小的结点排列. 分析:结点数最多为8,全排列即可.顶点范围是A~Z. #pragma comment(linker, "/STACK:102400000, 10240 ...

  2. Bootstrap每天必学之导航条

    http://www.jb51.net/article/75534.htm Bootstrap每天必学之导航条,本文向大家讲解了多种多样的导航条,以及导航条中元素的实现方法,感兴趣的小伙伴们可以参考一 ...

  3. Angular - - $q 承诺与延迟

    $q 一个帮助处理异步执行函数的服务.当他们做完处理时,使用它们的返回值(或异常). 受 Kris Kowa’s Q 的启发,这是一个实现promise/deferred对象的启用. $q的两种方式- ...

  4. Java 原型模式

    http://www.cnblogs.com/itTeacher/archive/2012/12/02/2797857.html http://www.cnblogs.com/java-my-life ...

  5. FP Tree算法原理总结

    在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题,FP Tree算法(也称F ...

  6. java7 invokedynamic命令深入研究

    在看java虚拟机字节码执行引擎的时候,里面提到了java虚拟机里调用方法的字节码指令有5种: invokestatic //调用静态方法 invokespecial //调用私有方法.实例构造器方法 ...

  7. Introduce: IEPI.BIATranscribe 图像表格拓写工具

    应用场合 数据表格是学术.文案工作中常用的表述形式.我们经常需要从第三方获取所需的数据.有些时候这些数据并非以可直接编辑的形式(如电子表格文档),而是以打印件或者扫描件的形式提供.假如需要对数据进行进 ...

  8. Tomcat使用常见问题

    1,启动服务器,闪退问题 原因:tomcat软件是用java语言开发的,软件启动时,会默认到系统环境变量中查找一个名叫JAVA_HOME的变量.这个变量的作用是找到tomcat启动所需的JVM.   ...

  9. GIS制图课程目录(持续整理)

    GIS制图课程目录 by 李远祥 由于过去一年都没有进行更新,近期终于抽出时间来进行相关知识的整理,因此,对专项技术进行了不同技术线条的梳理.为了方便阅读,特意整理一下全书的目录结构,希望对读者有帮助 ...

  10. 钉钉开发笔记(6)使用Google浏览器做真机页面调试

    注: 参考文献:https://developers.google.com/web/ 部分字段为翻译文献,水平有限,如有错误敬请指正 步骤1: 从Windows,Mac或Linux计算机远程调试And ...