Javascript:`error`对象的教程与实例

395 阅读3分钟

error 是javascript的标准对象,就像Boolean,FunctionObject 对象。当一个运行时错误发生时,这个对象会被抛出。

它有name,message,fileNamelineNumber 属性name,message 在所有的浏览器中都有支持。所有其他属性如fileNamelineNumber 都不支持所有的浏览器。

这是一般的语法:

new InternalError(Messages,FileName,LineNumber)  

和参数是

  • Messages 表示详细的描述性信息
  • Filename 表示发生错误的行号,表示发生在哪一行。
  • line number 在告诉行号发生

以上三个参数都是可选的。

如何声明错误对象

让我们看看如何声明一个错误对象的步骤

错误对象可以通过以下方式创建

  • 使用new 操作符。
  • 不使用new操作符。

两者都返回相同的错误对象,行为也相同。

因此,可以使用有或没有new操作符来创建对象。

var error=new Error('Error with new keyword');
var error1=Error('Error without new keyword');  
console.log(typeof error) // returns object  
console.log(typeof error1) // returns object`

如何在Javascript中处理异常?

当有错误发生时,应用程序会停止执行。我们必须要处理这些错误。

当一个错误被抛向客户端时,Javascript的try和catch关键字就会出现。

try/catch 块来帮助处理javascript应用程序中的异常/错误。

try {  
  throw new Error('Throwing Error object');  
} catch (e) {  
    console.log(typeof e ); // returns Object  
    console.log(e.name ); // returns Error  
    console.log(e.message); // returns Throwing Error object  
}  

从下面的例子来看。

  • 用null声明并初始化了实例变量,当试图访问未知方法时得到了异常。这个错误被抛出并在catch块中捕获。

Error.name返回 "TypeError"。这是错误类型中的一种。

Error.message返回详细的错误信息,如'Cannot read property 'method' of null',这个信息对每个浏览器类型都是不同的。
,堆栈跟踪是VM433:2 Uncaught TypeError:无法读取null的属性'方法',在:2:26。

try {  
    var nullInstance = null;  
    nullInstance.method();}   
 catch (e) {  
    console.log(typeof e );   
 // above returns VM433:2 Uncaught TypeError: Cannot read property 'method' of null  
    //    at :2:26  
    console.log(e.name ); // returns TypeError  
    console.log(e.message); // returns Cannot read property 'method' of null  
}  

在javascript中,有几种错误类型可用。请看下面的错误类型列表和它们的解释

错误名称-错误描述

评估错误EvalError-在执行Eval()函数时产生的错误。

内部错误InteralError-在javascript引擎中发生的运行时错误时产生的错误。

范围错误RangeError-在访问数字变量范围时发生的错误,该错误在定义范围之外。

引用错误-在执行引用操作的过程中产生的错误

语法错误SyntaxError-在执行Eval(code)方法中的代码时发生该错误。

类型错误-在实例变量不是有效类型时返回此错误

URIError-在encodeURI/decodeURI中传递的参数无效时发生此错误。

Error和上述所有的Error类型都是从Error.prototype扩展而来,而Error.prototype则是从全局对象Object.prototype扩展而来
让我们看一下使用Error对象的一些例子

错误对象instanceOf的例子

这个instanceOf()方法是用来检查特定的错误类型。这个方法检查实例是否属于给定的对象类型

try {  
    var instanceVariable;  
  instanceVariable.method();  
} catch (e) {  
    console.log('error ',e)  
  if (e instanceof EvalError) {  
    console.log(e.name + ': ' + e.message);  
  } else if (e instanceof TypeError) {  
    console.log(e.name + ': ' + e.message); // returns TypeError: Cannot read property 'bar' of undefined  
  }  
}

自定义错误声明扩展了错误对象

在我们的应用开发中,我们必须编写我们的应用特定的错误,如DuplicateError在保存重复的错误记录时发生。当我们声明一个自定义错误时,我们需要设置标准的属性,如名称和信息。到目前为止,我们已经看到了上面列出的不同错误。你也可以通过扩展Error对象来创建你自己的Error。

class DuplicateError extends Error {  
  constructor(message) {  
    super(message);   
    this.name = "DuplicateError";   
  }  
}  
try {  
  throw new DuplicateError('Duplicate Record found');  
} catch(err) {  
  console.log(err.message); // Duplicate Record found  
  console.log(err.name); // DuplicateError  
  console.log(err.stack); // prints complete stacktrace of a error  
}
  • 通过扩展Error对象创建自定义错误
  • 在构造函数中,第一行应该调用超类构造函数来设置消息属性。
  • 在你的代码中,使用throw new代码抛出自定义异常,我们可以在try/catch块中声明这段代码来处理自定义异常处理。