Програмните грешки са неизбежни. Рано или късно вашето приложение ще изпита неочаквано поведение. Както всеки друг език за програмиране, JavaScript предизвиква грешки, когато нещо се обърка във вашия код.

Грешките нарушават нормалния поток на приложението. Но те също помагат да защитите вашето приложение от непредсказуемо поведение. Знанието как правилно да се справяте с грешките е от решаващо значение.

Защо обработката на грешки е важна?

Обработката на грешки допринася за подобрено потребителско изживяване. Можете да замените грешките по подразбиране и понякога многословните грешки на JavaScript с ваши собствени по-четими за хората съобщения за грешка. Можете елегантно да се справите с причините за някои грешки и да поддържате програмата си работеща, вместо да я накарате да затвори.

Обработката на грешки също е полезна по време на разработката. Можете да уловите грешка по време на изпълнение и да направите нещо полезно с нея, като като го регистрирате в конзолата на браузъра. Това е по-благоприятно от грешката, която причинява срив и не знае къде или защо е възникнала грешката.

instagram viewer

Структура на вградените грешки в JavaScript

Грешките на JavaScript са обекти с три свойства:

  • име: Това е името на грешката. Например, липсващо име на променлива ще предизвика грешка, наречена SyntaxError.
  • съобщение: Това е основната част на съобщението и обяснява грешката текстово.
  • причина: Можете да използвате това свойство с персонализирани грешки, за да следите стека на повикванията.

Често срещани типове грешки в JavaScript

Ето някои често срещани грешки, открити в JavaScript.

Синтактична грешка

Синтактични грешки могат да възникнат, когато JavaScript се опитва да интерпретира вашия код. Това ще доведе до грешка, ако вашият код не отговаря на правилния синтаксис. Някои често срещани грешки, които могат да предизвикат синтактични грешки, са:

  • Липсващи имена на променливи.
  • Липсва „}“ след функция.
  • Липсва „)“ след условие.

ReferenceError

Референтни грешки възникват, когато програма се опитва да препратка към променлива който е недостъпен или е извън обхвата.

TypeError

JavaScript може да изведе типова грешка, когато не може да изпълни операция, защото типът, който очаква, е различен от този, който получава.

URIError

Тази грешка възниква, ако използвате неправилно глобална функция за обработка на URI адреси като decodeURIComponent(). В резултат на това кодирането или декодирането е неуспешно.

AggregateError

Тази грешка се използва за представяне на множество грешки, обвити в една. Използвайте го, когато искате да хвърлите много грешки наведнъж. Например, Promise.any() може да хвърли AggregateError(), когато всички обещания, предадени към него, бъдат отхвърлени.

Вътрешна грешка

InternalError се хвърля, когато възникне грешка в двигателя на JavaScript.

RangeError

Някои функции диктуват диапазона от стойности, които можете да подадете като аргументи. Тази грешка възниква, когато се опитате да подадете стойност, която не е включена в този диапазон.

Обработка на грешки с опита... Хвани блок

JavaScript предоставя вградена функционалност за обработка на изключения с опитайте...хванете...накрая блок. Той също така ви позволява да повдигате вашите собствени грешки, като използвате хвърлям оператор.

Можете да използвате блок try…catch за обработка на грешки, които възникват по време на изпълнение. Вие пишете валиден код, който очаквате да се изпълни правилно в блока try. В блока catch можете да напишете код за обработка на грешки.

опитвам {
// Валиден Javascript код
} улов (грешка) {
// Обработване на грешка
} накрая {
// Изпълнява се дори когато възникне грешка
}

Блокът catch се игнорира, ако кодът в блока try не поражда никакви грешки. Ако предизвика грешка, изпълнението преминава към блока catch. Кодът в блока finally се изпълнява независимо дали възникне грешка или не. Този блок не е задължителен, така че го пропуснете, ако не ви трябва.

Кодът, който включвате в пробния блок, трябва да е валиден. Ако не е, JavaScript ще изведе грешка при синтактичния анализ.

Нека да разгледаме практически пример:

опитвам {
конзола.log (текст)
} улов (грешка) {
конзола.дневник(грешка.съобщение)
} накрая {
console.log("Ще бъде изпълнено независимо от това")
}

Тази програма се опитва да регистрира стойността на текстовата променлива. Тъй като тази променлива не е дефинирана, програмата ще изведе грешка. Тази грешка се отпечатва на конзолата в блока catch. След това блокът finally се изпълнява и отпечатва собствено съобщение.

ReferenceError: текстът не е дефиниран
Ще бъде изпълнено независимо от това

В ситуации, в които трябва да повдигнете собствената си грешка, използвайте хвърлям оператор.

Помислете за този пример, който извежда грешка, ако данните са фалшиви:

конст данни = getData()

опитвам {
if (!data) {
хвърлям "Няма данни"
}

конзола.log (данни)
// продължи
} улов(грешка) {
конзола.log (грешка) // "Няма данни"
}

В този пример програмата извиква функцията getData() и присвоява нейния резултат на променливата data. В блока try блокът извежда персонализирана грешка, ако данните са празни. Блокът catch улавя тази грешка и я регистрира в конзолата.

Изхвърлянето на грешки е много полезно по време на разработката. Можете да използвате персонализираното съобщение за грешка, за да разберете защо приложението ви не работи според очакванията.

Както показва този пример, можете да използвате низ за обекта за грешка. Всъщност можете да хвърлите всеки JavaScript израз като грешка. Въпреки това, в името на съгласуваността с вградените грешки, използвайте JavaScript обект, съдържащ име и съобщение.

хвърлям {
име: "Име на грешката",
съобщение: "Съобщение за грешка"
}

Можете също да използвате вградените конструктори на JavaScript, когато хвърляте грешки. Тези конструктори включват Error, SyntaxError и ReferenceError, наред с други.

За да изведете грешка с помощта на конструктора на грешка, използвайте този код:

хвърлямновГрешка("Няма данни")

Вече можете да посочите името и съобщението.

конзола.log (грешка.име) // Грешка
конзола.log (грешка.съобщение) // Няма данни

Разширяване на JavaScript Error Object

Персонализираният клас на грешка е полезен при обработка на грешки, които не съответстват на обектите, които вече са предоставени от JavaScript. Например, може да искате да изолирате грешка при валидиране на данни като конкретен тип, наречен ValidationError.

Можете да използвате a JavaScript ES2015 клас за създаване на персонализиран клас на грешка.

класValidationErrorсе простираГрешка{
конструктор(съобщение) {
супер(съобщение);
това.име = "ValidationError";
}
}

Изпратете грешка, като използвате класа ValidationError по следния начин:

хвърлямнов ValidationError("Вашето съобщение за грешка")

Хвърлената грешка ще бъде обект с името и стойностите на съобщението.

{
име: "ValidationError",
съобщение: "Вашето съобщение за грешка"
}

Грешките са там, за да помогнат

Обработката на грешки е основна част от програмирането, независимо от езика, който използвате. JavaScript има страхотна поддръжка за повдигане и прихващане на грешки в стила на изключения. Освен това има няколко вградени типа грешки, които можете да обработвате и използвате за вашите собствени случаи.

Някои грешки като синтактични грешки могат да останат неоткрити, когато пишете JavaScript в „небрежен режим“. Използването на строг режим позволява на JavaScript да улавя грешки, които иначе би игнорирал.