Понимание того, как читать объекты ошибок, жизненно важно, чтобы вы могли отлаживать свой код и исправлять свои ошибки. В этой статье мы рассмотрим некоторые из основных ошибок с примерами, с которыми вы можете столкнуться.

Что такое объекты ошибок?

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

  • Имя: Тип ошибки
  • Сообщение: Описание ошибки
  • Имя файла: имя файла, содержащего ошибку
  • Номер строки: номер строки ошибки

На изображении выше ReferenceError — это имя ошибки; j не определено — это описание ошибки. Затем справа у нас есть имя файла и номер строки. В данном примере это VM56:1, поскольку ошибка была создана в консоли.

Существует несколько типов встроенных объектов ошибок, и их понимание поможет вам быстрее понять проблему. Ниже приведены те, которые вы, скорее всего, увидите:

  • Ошибка
  • Ошибка синтаксиса
  • ReferenceError
  • Ошибка типа
  • RangeError
  • URIError
  • Ошибка

Ошибка

Ошибка — это прототип объекта, из которого создаются все вышеперечисленные объекты ошибок. Мы можем использовать это для создания собственных объектов ошибок.

let ourError = new Error('Some custom error message');
throw ourError;
//Returns ---> Uncaught Error: Some custom error message
    at <anonymous>:1:16

Мы также можем расширить это и добавить некоторые дополнительные свойства к нашему объекту ошибки.

let ourError = new Error('Some custom error message');
ourError.name = 'ValidationError';
console.log(ourError);
ValidationError: Some custom error message
    at <anonymous>:1:16

Ошибка синтаксиса

Мы получаем синтаксическую ошибку, когда код синтаксически неверен и движок JavaScript не может разобрать код. Часто это может быть так же просто, как опечатка. Давайте посмотрим на некоторые примеры.

let ourString = "a string';
//Returns ---> Uncaught SyntaxError: Invalid or unexpected token

В приведенном выше примере возвращается ошибка из-за смешивания кавычек.

console.log('a'
//Returns ---> Uncaught SyntaxError: missing ) after argument list

Приведенный выше пример возвращает ошибку из-за отсутствия закрывающих скобок.

let ourObject = {
  person one: "Bob"
};
//Returns ---> Uncaught SyntaxError: Unexpected identifier

Приведенный выше пример возвращает ошибку из-за неправильного интервала в ключевом человеке.

let ourArray = [1 2, 3];
//Returns Uncaught SyntaxError: Unexpected number

Приведенный выше пример возвращает ошибку из-за отсутствия запятой между элементами 1 и 2.

Ошибка ссылки

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

let one = 1;
let sum = one + two;
// Returns ---> Uncaught ReferenceError: two is not defined

В приведенном выше примере мы получаем ошибку, потому что sum пытается добавить переменную с именем one к переменной с именем two, но мы объявили только переменную с именем one.

console.log(aFunction());
//Returns ---> Uncaught ReferenceError: aFunction is not defined

Приведенный выше пример возвращает ошибку, потому что мы пытаемся вызвать функцию в файле console.log с именем aFunction, но мы никогда не объявляли эту функцию.

Ошибка типа

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

let anotherObject = {};
anotherObject.one();
//Returns ---> VM363:1 Uncaught TypeError: anotherObject.one is not a function

Мы получаем ошибку в приведенном выше примере, потому что пытаемся использовать метод с именем one для объекта anotherObject, но этот метод не существует.

Window.open();
//Returns ---> Uncaught TypeError: Window.open is not a function
window.Open();
//Returns ---> Uncaught TypeError: window.Open is not a function

Оба приведенных выше примера используют неправильный регистр для первого примера. Окно в отличие от окна. Для второго примера Open вместо open.

RangeError

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

let ourArray = new Array(-10);
//Returns ---> Uncaught RangeError: Invalid array length

В приведенном выше примере мы получаем ошибку, потому что не можем создать массив с -10 элементами.

let ourValue = 1009.99;
ourValue.toFixed(211);
//Returns ---> Uncaught RangeError: toFixed() digits argument must be between 0 and 100

Мы получаем ошибку в приведенном выше примере, потому что мы не можем перейти в 211 к параметрам toFixed.

let num = 5.4321;
num.toPrecision(200);
//Returns ---> Uncaught RangeError: toFixed() digits argument must be between 0 and 100

В приведенном выше примере мы получаем ошибку, потому что не можем передать 200 в параметры метода toPrecision.

URIError

Когда кодирование, декодирование или URI не работают, мы увидим ошибку URIError.

decodeURI('https://www.awebsite.com/%a%b%c');
//Returns ---> Uncaught URIError: URI malformed
    at decodeURI

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

Надеюсь, вам понравилась эта статья. Не стесняйтесь оставлять комментарии, вопросы или отзывы и подписывайтесь на меня, чтобы получать больше контента!

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.