error 是javascript的标准对象,就像Boolean,Function 和Object 对象。当一个运行时错误发生时,这个对象会被抛出。
它有name,message,fileName 和lineNumber 属性name,message 在所有的浏览器中都有支持。所有其他属性如fileName 和lineNumber 都不支持所有的浏览器。
这是一般的语法:
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块中声明这段代码来处理自定义异常处理。