javaScript复习(七)Error对象

Error:

1.错误/异常处理

   错误:导致程序无法继续执行的异常状态

    js中一旦发生错误,就会自动创建一个Error类型对象

2、js中的6种错误类型,当发生错误时,整个程序都无法执行

SyntaxError: 语法错误       Syntax:语法; 句法; 句法规则

    ReferenceError: 引用错误,找不到变量或对象   Reference:引用; 参照

    TypeError: 类型错误,错误的使用了对象中的方法时    Type:类型;

    RangeError: 范围错误,参数超范围     Range:范围;

    EvalError: 调用eval函数时出错

URLError: URL错误

 

①SyntaxError:语法错误

// 1.1 变量名不符合规范

var 1       // Uncaught SyntaxError: Unexpected number

var 1a       // Uncaught SyntaxError: Invalid or unexpected token

// 1.2 给关键字赋值

function = 5     // Uncaught SyntaxError: Unexpected token =

② Uncaught ReferenceError:引用错误

引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值。

// 2.1 引用了不存在的变量

a()       // Uncaught ReferenceError: a is not defined

console.log(b)     // Uncaught ReferenceError: b is not defined

// 2.2 给一个无法被赋值的对象赋值

console.log("abc") = 1   // Uncaught ReferenceError: Invalid left-hand side in assignment

③RangeError:范围错误

RangeError是当一个只超出有效范围时发生的错误。主要的有几种情况,第一是数组长度为负数,第二是Number对象的方法参数超出范围,以及函数堆栈超过最大值。

// 3.1 数组长度为负数

[].length = -5      // Uncaught RangeError: Invalid array length

// 3.2 Number对象的方法参数超出范围

var num = new Number(12.34)

console.log(num.toFixed(-1))   // Uncaught RangeError: toFixed() digits argument must be between 0 and 20 at Number.toFixed

// 说明: toFixed方法的作用是将数字四舍五入为指定小数位数的数字,参数是小数点后的位数,范围为0-20.

④ TypeError类型错误

变量或参数不是预期类型时发生的错误。比如使用new字符串、布尔值等原始类型和调用对象不存在的方法就会抛出这种错误,因为new命令的参数应该是一个构造函数。

// 4.1 调用不存在的方法

123()        // Uncaught TypeError: 123 is not a function

var o = {}

o.run()        // Uncaught TypeError: o.run is not a function

// 4.2 new关键字后接基本类型

var p = new 456      // Uncaught TypeError: 456 is not a constructor

⑤URIError,URL错误

主要是相关函数的参数不正确。

decodeURI("%")     // Uncaught URIError: URI malformed at decodeURI

URI相关参数不正确时抛出的错误,主要涉及encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()六个函数。

⑥ EvalError eval()函数执行错误

在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。

例如下面的情况:

var myEval = eval;

myEval("alert('call eval')");

需要注意的是:ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。

/*以上六个错误的案例转自脚本之家“详解JavaScript中的六种错误类型”

作者:晌风,网址https://www.jb51.net/article/124210.htm#comments*/

 

3、错误处理:在程序发生错误时,可以保证程序不退出或正常退出

① 如何错误处理:

    语法:tryCatch块:3部分

          try{

     正常代码段中,可能出错的代码段

          }catch(err){//仅在发生错误时才执行

           //一旦发生错误err中就会自动存入Error对象

          1. 记录/显示错误的信息

              2. 继续向调用者抛出异常

          }[finally{

             无论对错,一定都会执行的代码段

             释放资源

          }]

语句执行顺序为:首先执行try语句块中的代码,如果抛出异常,接着执行catch语句块中代码,如果没有异常,catch语句块中代码将会被忽略,但不管是否有异常,最后最会执行finally子句。try后面必须接着一个catch或者finally,也就是说JavaScript中的try-catch可以有3中组合形式。即try-catch、try-finally、try-catch-finally三种形式。

  

如果try块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行catch块,此时,catch块会接收到一个包含错误信息的对象。与在其他语言中不同的是,即使你不想使用这个错误对象,也要给它起个名字。这个对象中包含的实际信息会因浏览器而异,但共同的是有一个保存着错误信息的message属性。

例:try {

    window.someNonexistentFunction(); //调用不存在的函数

} catch (error) {

    console.log(error.message);

}      //window.someNonexistentFunction is not a function

throw 语句允许我们创建自定义错误。

正确的技术术语是:创建或抛出异常(exception)。

如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。

例:

<!DOCTYPE html>

<html>

<body>

 

<script>

function myFunction()

{

try

{

var x=document.getElementById("demo").value;

if(x=="")    throw "值为空";

if(isNaN(x))  throw "不是数字";

if(x>10)     throw "太大";

if(x<5)      throw "太小";

}

catch(err)

{

var y=document.getElementById("mess");

y.innerHTML="错误:" + err + "。";

}

}

</script>

 

<h1>Error</h1>

<p>请输入 5 到 10 之间的数字:</p>

<input id="demo" type="text">

<button type="button" onclick="myFunction()">测试输入值</button>

<p id="mess"></p>

 

</body>

</html>

猜你喜欢

转载自blog.csdn.net/shilipeng666/article/details/84141300