English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScript базовый курс

JavaScript объект

JavaScript функция

JS HTML DOM

JS браузер BOM

AJAX базовый курс

JavaScript справочник

Обработка ошибок в JavaScript

执行JavaScript代码时,可能会发生意想不到的错误。

错误可以是程序员编写的编码错误,由于输入错误引起的错误以及其他不可预见的事情。

因此,为了处理错误,JavaScript提供了4个关键字:

  • try语句使您可以测试代码块是否存在错误

  • catch语句可让您处理错误

  • throw语句可让您创建自定义错误

  • finally语句使您可以在尝试并捕获之后执行代码,而不管结果如何

在此示例中,我们将“alert”写为“aaalert”来故意产生错误:

try {
aaalert("Hello world");
catch(e){
document.getElementById("result").innerHTML = e.name + "<br>" + e.message;
}
Проверьте, посмотрите‹/›

当发生错误时,JavaScript通常会停止运行,并创建一个具有两个属性的Error объект:name и message。

JavaScript try ... catch语句

try语句允许定义一个代码块,在执行时将进行错误测试。

catch允许在try块中发生错误时定义要执行的代码块。

JavaScript语句try和catch成对出现:

try {
  //try_statements-尝试尝试的语句
catch(err){
  //catch_statements-处理错误的语句
}

JavaScript throw statement

The throw statement throws a user-defined exception.

The throw statement allows you to create custom errors. Technically, this is called a "Throw exception

Exceptions can be JavaScript strings, numbers, boolean values, or objects:

  throw "Invalid"; // Generate an exception with a string value
  throw 32; // Generate an exception with a value of 32
  throw true; // Generate an exception with a value of true

If throw is used with try and catch, you can specify the program flow and generate a custom error message.

In this example, if any non-numeric parameter is passed, the getRectArea() will throw a custom error:

function getRectArea(width, height) {
   if (isNaN(width) || isNaN(height)) {
  throw "Parameter is not a number!";
   }
}
try {
   getRectArea(5, 'Z');
}
catch(err) {
   document.getElementById('para').innerHTML = err;
}
Проверьте, посмотрите‹/›

Input validation example

In this example, if the value is incorrect, an exception (err) is thrown. The catch statement catches the exception (err) and displays a custom error message:

var x = document.querySelector("input").value;
try {
   if(x == "") throw "is Empty";
   if(isNaN(x)) throw "Not a Number";
   if(x > 10) throw "too High";
   if(x < 5) throw "too Low";
}
catch(err) {
   document.getElementById("para").innerHTML = "Input " + err;
}
Проверьте, посмотрите‹/›

JavaScript final statement

This finally statement allows you to execute code after try and catch, regardless of the result.

try {
   aaalert("Hello world");
}
catch(err) {
   document.getElementById("result").innerHTML = err;
}
finally {
   document.getElementById("result").innerHTML += "<h3>Finally statement executed</h3>";
}
Проверьте, посмотрите‹/›

catch и finally语句 являются опциональными, но вам нужно использовать один из них (или оба, если не два), а не использовать оператор try:

try {
   aaalert("Hello world");
}
finally {
   document.getElementById("result").innerHTML = "Finally statement executed";
}
Проверьте, посмотрите‹/›

Объект ошибки JavaScript

JavaScript имеет встроенный объект Error, который предоставляет информацию об ошибке при возникновении ошибки.

Объект ошибки предоставляет два полезных атрибута: name и message.

Свойства объекта ошибки

В таблице ниже перечислены свойства объекта Error:

АтрибутОписание
nameУстановка или возвращение имени ошибки
messageУстановка или возвращение сообщения об ошибке

Тип ошибки

Атрибут error name может возвращать семь различных значений:

ТипОписание
EvalErrorОшибка, связанная с глобальной функцией eval()
InternalErrorОшибка, возникающая при возникновении внутреннего ошибки в двигателе JavaScript
RangeErrorОшибка, возникающая, когда числовая переменная или параметр выходит за пределы своего validного диапазона
ReferenceErrorОшибка, возникающая при отмене ссылки на无效ную ссылку
SyntaxErrorОшибка, возникающая при анализе кода в eval()
TypeErrorОшибка, возникающая, когда переменная или параметр не является validным типом
URIErrorОшибка, возникающая при передаче неvalidных параметров encodeURI() или decodeURI()

В следующем разделе будет более подробно рассмотрено каждый из этих типов ошибок.

EvalError

Когда черезeval()EvalError выкидывается, когда во время выполнения функции происходит ошибка.

Но JavaScript больше не выкидывает это исключение, но объект сохраняется для обратной совместимости.

В более новых версиях JavaScript не выкидывается исключение EvalError. Вместо этого используется SyntaxError.

RangeError

RangeError возникает, когда используется число за пределами разрешенного диапазона.

Например, создание массива с отрицательной длиной вызывает ошибку RangeError:

try {
var arr = new Array(-1); // выкидывает ошибку диапазона
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
Проверьте, посмотрите‹/›

ReferenceError

Обычно выкидывается ошибка ссылки ReferenceError, когда вы пытаетесь ссылаться или доступа к несуществующему переменной или объекту.

try {
var x = 5 + y; // выкидывает ошибку ссылки
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
Проверьте, посмотрите‹/›

SyntaxError

Если в вашем коде JavaScript есть любые синтаксические ошибки, они вызовут ошибку SyntaxError при выполнении.

try {
eval("alert('Hello)"); // Пропущенная кавычка throw выбрасывает ошибку
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
Проверьте, посмотрите‹/›

TypeError

Когда значение не является ожидаемым типом, выбрасывается ошибка TypeError.

var num = 50;
try {
num.toUpperCase(); // Вы не можете преобразовать цифру в верхний регистр
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
Проверьте, посмотрите‹/›

URIError

Когда вы указываете无效ный URI (универсальный ресурсный идентификатор), вызывается ошибка URIError.

try {
decodeURI("%%"); // Вы не можете декодировать процентный символ URI
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
Проверьте, посмотрите‹/›

Полный справочник по ошибкам

Для полного справочника по свойствам и методам обратитесь в нашСправочник по ошибкам JavaScript.

Часть справки содержит описание и примеры всех свойств и типов ошибок.