js中错误处理机制

1.基本知识

1. 错误对象

Error,SyntaxError,RangeError, ReferenceError,TypeError,URIError

上面的都是构造函数;

new 命令可以生成错误实例对象;可以传入描述作为参数,成为实例对象的message属性;

除了message属性,还有两个非标准属性(name, stack)stack是调用栈

var err = new Error("错误实例");
err.message; // "错误实例"
err.name; //"Error"
err.stack;//"Error: 错误实例 at <anonymous>:1:11"

2. throw语句

throw语句,如果不进行捕获(try...catch...),会中断程序执行。

throw命令可以抛出任何类型的值;抛出什么,则捕获的就是什么!

try{
    throw "error"
} catch(err){
    console.log(err); //"error"
}

3.try...catch...finally..语句

使用try...catch...语句后,可以捕获错误,防止代码崩溃;

1)js中,程序执行遇到return, throw后,后面的语句不再执行;

try{
    throw "this is a error";
    console.log("after throw"); // 永远不会执行
} catch(error) {
    console.log(error);
}
// 返回"this is a error"

2)浏览器中单独的try代码块中不能使用return;否则报错;而且catch无法捕获

try{
    return "this is a error";
} catch {
}
// Uncaught SyntaxError: return not in a function

由上面可以知道,return语句必须用在function中。另外,yield语句也是必须在函数中被调用。

如果想在try/catch/finally代码块中使用return语句,可以在外面包裹一层function。

3)catch语句

如果try代码块中代码本身不抛出异常,也没有手动抛出异常,程序永远不会进入catch代码块。

try {
   console.log("throw nothind");
} catch { // 参数可以省略
   console.log("永远不会执行"); // try没有抛出错误,不会进入catch;永远不会被打印,
}

如果try代码块中抛出异常,则代码进入catch代码块执行完后,继续原来的代码执行。

try {
    throw "error";
 } catch { // 参数可以省略
    console.log("catch")
 }
 console.log(‘after‘);
 // catch
 // after

4)finally语句

finally语句不论是否抛出异常,都会执行。且try后者catch中的return语句取值会在finally之前取值。

var count = 1;
function test() {
    try {
        console.log("try");
        throw new Error("this is a error");
    } catch(err) {
        console.log("catch error");
        return count;
    } finally {
        console.log("finally")
        count+=1;
    }
    console.log("after"); //永远不会执行
}
test();
// try
// catch error
// finally
// 1 最后返回1,说明return在finally执行前先执行,但是最后才返回

如果在该代码块有return语句,会覆盖try,catch中的return语句

var count = 1;
function test() {
    try {
        console.log("try");
        throw new Error("this is a error");
    } catch(err) {
        console.log("catch error");
        return count;
    } finally {
        console.log("finally")
        count+=1;
        return count;
    }
    console.log("after"); //永远不会执行,因为前面有return语句
}
test();
// try
// catch error
// finally
// 2 执行的是finally语句中的return语句

覆盖catch中return

如果在该代码块中有return语句,会覆盖catch中的throw语句;

var count = 1;
function test() {
    try {
        throw new Error("this is a error");
    } catch(err) {
        console.log("catch error");
        throw err; // 不会执行;正常catch中遇到throw进入finally,等执行完finally代码块,返回这里抛出异常
    } finally {
        return count; // return 后不会返回catch代码块
    }
}
try {
    test();
} catch(err) {
    console.log("catch test error"); // 不会执行
}
// catch error
// 1 返回1

4. finally语句应用

示例: 操作文件时,打开文件写入,不管是否写入成功,都要关闭文件

// 伪代码如下
openFile();
try {
    writeFile()
} catch(err) {
    console.log("写入失败");
} finally {
    closeFile(); // 总要执行
}

2. 实践应用

当使用接口请求服务器数据时,一般都要使用try...catch...方法,预防接口报错,程序崩溃!

原文地址:https://www.cnblogs.com/lyraLee/p/11651433.html

时间: 2024-10-10 07:25:53

js中错误处理机制的相关文章

js中错误处理的相关知识

错误bug是指程序执行过程中,导致程序无法正常执行的情况. 后果:程序会强行中断退出:     错误处理:                即使程序出现错误,也保证程序不异常中断的机制. 一般的使用的代码如下: try{//始终执行            //可能出现的代码 }catch(err){//只有发生错误时才执行:                         出错时执行的错误处理代码-----通知用户,记录日志,保存进度.                         err:错误

关于js中的回收机制,通俗版

在前面的几篇文章中,我讲解过了js中的回收机制,但是对于当时的我来说,我自己对回收机制的这个概念也有些懵懵懂懂,现在对回收机制有了更深入的理解,所以特此发布此文给于总结,也好加深记忆. 如果你想学习闭包那么js中的回收机制是必不可少的,当然学习闭包除了需要理解js中的回收机制以外还需要了解其他的概念,我的其他文章有相关的说明,这里不做闭包的讲解. 为什么要有回收机制?why? 打个比方,我有一个内存卡,这个内存是8G的,我把文件,视频,音乐,都保存到了这个内存卡,随着我的储存的内容越来越多,这个

再次讲解js中的回收机制是怎么一回事。

在前几天的一篇闭包文章中我们简单的介绍了一下闭包,但是并没有深入的讲解,因为闭包涉及的知识点比较多,为了能够更好的理解闭包,今天讲解一下关于js中的回收机制. 在初识闭包一文中我说过js中有回收机制这么一回事,让我们一起回顾一下,并且深入的了解js中的回收机制到底是怎么一回事. function a(){ var num = 10; return function(){ num ++; console.log(num); } } a()(); //11 a()(); //11 按理说第二次执行函

【转】别再为了this发愁了:JS中的this机制

原文出处: front-Thinking 题记:JavaScript中有很多令人困惑的地方,或者叫做机制.但是,就是这些东西让JavaScript显得那么美好而与众不同.比方说函数也是对象.闭包.原型链继承等等,而这其中就包括颇让人费解的this机制.不管是新手还是老手,不仔细深抠一下还真闹不明白this倒地咋回事捏.今天,我们就一起看一下this倒地咋回事,别再为了this发愁了. 1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,它的特殊在于它自动定义于每

JS中的this机制

1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,它的特殊在于它自动定义于每一个函数域内,但是this倒地指引啥东西却让很多人张二摸不着头脑.这里我们留个小悬念,希望看完这篇文章了你能回答出来this到底指引个甚. 2.this有啥用? 那边观众又该问了,既然this这么难以理解,那么为个甚还要用它呢?我们来看个例子: 1 function identify() { 2 return this.name.toUpperCase(); 3 } 4 functio

别再为了this发愁了------JS中的this机制

题记:JavaScript中有很多令人困惑的地方,或者叫做机制.但是,就是这些东西让JavaScript显得那么美好而与众不同.比方说函数也是对象.闭包.原型链继承等等,而这其中就包括颇让人费解的this机制.不管是新手还是老手,不仔细深抠一下还真闹不明白this倒地咋回事捏.今天,我们就一起看一下this倒地咋回事,别再为了this发愁了. 1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,它的特殊在于它自动定义于每一个函数域内,但是this倒地指引啥东西却

别再为了this发愁了:JS中的this机制

本文转自http://web.jobbole.com/82262/ 题记:JavaScript中有很多令人困惑的地方,或者叫做机制.但是,就是这些东西让JavaScript显得那么美好而与众不同.比方说函数也是对象.闭包.原型链继承等等,而这其中就包括颇让人费解的this机制.不管是新手还是老手,不仔细深抠一下还真闹不明白this倒地咋回事捏.今天,我们就一起看一下this倒地咋回事,别再为了this发愁了. 1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,

php中错误处理机制

php中,异常处理机制是有限的,无法自动抛出异常,必须手动进行,并且内置异常有限. php把许多异常看作错误,这样就可以把这些异常想错误一样用set_error_handler接管,进而主动抛出异常. 比如以下warning类型的错误是捕获不到的 :   Warning: Division by zero in 1 try{ 2 $a = 5/0; 3 }catch (Exception $e){ 4 echo '错误信息:',$e->getMessage(); 5 } 使用set_error_

JS中错误处理

1 错误类型 1. Error 是基本类型 其他错误都继承该类型 2. EvalError 使用eval()函数时发生异常 3. RangeError 4. ReferenceError 找不到对象的情况下(导致object expected ),访问不存在的对象的时发生 5. SyntaxError 语法错误 6. TypeError 变量中保存着意外类型,或者在访问不存在的方法时 7. URLError try { someFunction(); } catch (error) { if (