Error
содержит:
.name
.message
.toString() // name + ': ' + message
.stack
— string где произошла ошибка (не стандарт)
try
{
// код
throw new Error( 'Error message' );
}
catch ( exception )
{
window.console && console.error && console.error( exeption );
}
Типы ошибок:
- EvalError
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError
throw expression;
— выбов ошибки со значением expression.
Можно передавать любое значение, но лучше всегда передавать только объект типа Error:
throw true;
throw 42;
throw 'Error!!!';
throw new Error();
Собственный тип ошибок
function MyError( message )
{
this.name = 'MyError';
this.message = message || 'Default message';
}
MyError.prototype = new Error();
MyError.prototype.constructor = MyError;
try
{
// ...
throw new MyError();
// ...
}
catch ( exception )
{
if ( exception instanceof MyError )
{
// Обрабатываем
}
else
{
throw exception; // Пропускаем дальше
}
}
finally
— выполняется всегда, независимо от возникновения ошибки и исхода её обработки.
Последовательность
function test( x )
{
console.log( 1 );
try
{
console.log( 2 );
x();
console.log( 3 );
}
catch ( exception )
{
console.log( 4 );
console.log( exception.toString() );
return; // попробовать, убрав
console.log( 5 );
}
finally
{
console.log( 6 );
}
console.log( 7 );
}
test( null );
// 1,2,4,6
// 1,2,4,5,6,7 без return
test( function(){} );
// 1,2,3,6,7
Если добавить return после 1: 1
Если добавить return после 2: 1,2,6