English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
执行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。
try语句允许定义一个代码块,在执行时将进行错误测试。
catch允许在try块中发生错误时定义要执行的代码块。
JavaScript语句try和catch成对出现:
try { //try_statements-尝试尝试的语句 catch(err){ //catch_statements-处理错误的语句 }
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; }Проверьте, посмотрите‹/›
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; }Проверьте, посмотрите‹/›
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 имеет встроенный объект Error, который предоставляет информацию об ошибке при возникновении ошибки.
Объект ошибки предоставляет два полезных атрибута: name и message.
В таблице ниже перечислены свойства объекта Error:
Атрибут | Описание |
---|---|
name | Установка или возвращение имени ошибки |
message | Установка или возвращение сообщения об ошибке |
Атрибут error name может возвращать семь различных значений:
Тип | Описание |
---|---|
EvalError | Ошибка, связанная с глобальной функцией eval() |
InternalError | Ошибка, возникающая при возникновении внутреннего ошибки в двигателе JavaScript |
RangeError | Ошибка, возникающая, когда числовая переменная или параметр выходит за пределы своего validного диапазона |
ReferenceError | Ошибка, возникающая при отмене ссылки на无效ную ссылку |
SyntaxError | Ошибка, возникающая при анализе кода в eval() |
TypeError | Ошибка, возникающая, когда переменная или параметр не является validным типом |
URIError | Ошибка, возникающая при передаче неvalidных параметров encodeURI() или decodeURI() |
В следующем разделе будет более подробно рассмотрено каждый из этих типов ошибок.
Когда черезeval()EvalError выкидывается, когда во время выполнения функции происходит ошибка.
Но JavaScript больше не выкидывает это исключение, но объект сохраняется для обратной совместимости.
В более новых версиях JavaScript не выкидывается исключение EvalError. Вместо этого используется SyntaxError.
RangeError возникает, когда используется число за пределами разрешенного диапазона.
Например, создание массива с отрицательной длиной вызывает ошибку RangeError:
try { var arr = new Array(-1); // выкидывает ошибку диапазона } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }Проверьте, посмотрите‹/›
Обычно выкидывается ошибка ссылки ReferenceError, когда вы пытаетесь ссылаться или доступа к несуществующему переменной или объекту.
try { var x = 5 + y; // выкидывает ошибку ссылки } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }Проверьте, посмотрите‹/›
Если в вашем коде JavaScript есть любые синтаксические ошибки, они вызовут ошибку SyntaxError при выполнении.
try { eval("alert('Hello)"); // Пропущенная кавычка throw выбрасывает ошибку } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }Проверьте, посмотрите‹/›
Когда значение не является ожидаемым типом, выбрасывается ошибка TypeError.
var num = 50; try { num.toUpperCase(); // Вы не можете преобразовать цифру в верхний регистр } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }Проверьте, посмотрите‹/›
Когда вы указываете无效ный URI (универсальный ресурсный идентификатор), вызывается ошибка URIError.
try { decodeURI("%%"); // Вы не можете декодировать процентный символ URI } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }Проверьте, посмотрите‹/›
Для полного справочника по свойствам и методам обратитесь в нашСправочник по ошибкам JavaScript.
Часть справки содержит описание и примеры всех свойств и типов ошибок.