JavaScript дает нам 8 объектов ошибок , которые возникают в выражении try/catch в зависимости от типа ошибки:
ОшибкаОшибка оценкиОшибка диапазонаОшибка ссылкиСинтаксическая ошибкаОшибка типаОшибка Url
Давайте проанализируем каждый из них.
Ошибка
Это общая ошибка, и именно от нее наследуются все остальные объекты ошибок. Вы никогда не увидите экземпляр Error напрямую, а вместо этого JavaScript запускает одну из других ошибок, перечисленных выше, которые наследуются от Error .
Он содержит 2 свойства:
сообщение: описание ошибки, удобочитаемое сообщение, которое должно объяснить, какая ошибка произошлаимя: тип возникшей ошибки (принимает значение имени конкретного объекта ошибки, напримерОшибка типаилиОшибка синтаксиса)
и предоставляет только один метод, toString() , который отвечает за создание значимой строки из ошибки, которую можно использовать для ее вывода на экран.
Ошибка оценки
Эта ошибка определена в современном JavaScript, но на самом деле никогда не вызывается JavaScript и остается в целях совместимости. Он был определен в ECMAScript 3, но его нет в стандарте с ECMAScript 5.1.
Он использовался для указания на то, что глобальная функция eval() использовалась неправильно, несовместимым образом с ее определением.
Ошибка диапазона
A Ошибка диапазона срабатывает, когда числовое значение не входит в диапазон допустимых значений.
Самый простой пример – когда вы устанавливаете длину массива в отрицательное значение:
[].length = -1 //RangeError: Invalid array length
или когда вы устанавливаете его на число больше, чем 4294967295
[].length = 4294967295 //4294967295 [].length = 4294967296 //RangeError: Invalid array length
(это магическое число указано в спецификации JavaScript как максимальный диапазон 32-разрядного целого числа без знака, эквивалентный Math.pow(2, 32) - 1 )
Вот наиболее распространенные ошибки диапазона, которые вы можете обнаружить в дикой природе:
Ошибка диапазона: аргумент не является допустимой кодовой точкойОшибка диапазона: недопустимая длина массиваОшибка диапазона: неверная датаОшибка диапазона: точность находится вне диапазонаОшибка диапазона: основание должно быть целым числомОшибка диапазона: количество повторений должно быть меньше бесконечностиОшибка диапазона: количество повторений должно быть неотрицательным
Ошибка ссылки
A Ошибка ссылки указывает, что обнаружено недопустимое ссылочное значение: программа JavaScript пытается прочитать переменную, которая не существует.
dog //ReferenceError: dog is not defined dog = 2 //ReferenceError: dog is not defined
Имейте в виду, что приведенная выше инструкция создаст переменную dog в глобальном объекте, если она не будет запущена в строгом режиме .
Вот наиболее распространенные ошибки ссылок, которые вы можете обнаружить в дикой природе:
Ошибка ссылки: "x" не определенОшибка ссылки: присвоение необъявленной переменной "x"Ошибка ссылки: не удается получить доступ к лексическому объявлению "X" до инициализацииОшибка ссылки: устаревший вызывающий объект или использование аргументовОшибка ссылки: недопустимое назначение слеваОшибка ссылки: ссылка на неопределенное свойство "x"
Синтаксическая ошибка
A Синтаксическая ошибка возникает, когда в программе обнаружена синтаксическая ошибка.
Вот несколько примеров кода, который генерирует синтаксическую ошибку.
Оператор функции без имени:
function() {
return 'Hi!'
}
//SyntaxError: function statement requires a name
Отсутствует запятая после определения свойства объекта:
const dog = {
name: 'Roger'
age: 5
}
//SyntaxError: missing } after property list
Вот наиболее распространенные синтаксические ошибки, которые вы можете обнаружить в дикой природе:
Синтаксическая ошибка: "0" - восьмеричные литералы с префиксом и восьмеричный побег. являются устаревшимиСинтаксическая ошибка: "использовать строгий" не допускается в функции с непростыми параметрамиСинтаксическая ошибка: "x" - зарезервированный идентификаторСинтаксическая ошибка: JSON.синтаксический анализ: плохой синтаксический анализСинтаксическая ошибка: Неверно сформированный формальный параметрСинтаксическая ошибка: Неожиданный токенСинтаксическая ошибка: Использование//@ для указания прагм sourceURL устарело. Вместо этого используйте//#Синтаксическая ошибка: объявление в начале цикла for-of не может иметь инициализатораСинтаксическая ошибка: применение оператора "удалить" к неполному имени не рекомендуетсяСинтаксическая ошибка: в объявлениях заголовков циклов для в может не быть инициализаторовОшибка синтаксиса: оператор функции требует имениСинтаксическая ошибка: идентификатор начинается сразу после числового литералаСинтаксическая ошибка: незаконный символСинтаксическая ошибка: недопустимый флаг регулярного выражения "x"Синтаксическая ошибка: отсутствует) после списка аргументовСинтаксическая ошибка: отсутствует) после условияСинтаксическая ошибка: отсутствует: после идентификатора свойстваСинтаксическая ошибка: отсутствует; перед утверждениемСинтаксическая ошибка: объявление constСинтаксическая ошибка: отсутствует \] после списка элементовСинтаксическая ошибка: отсутствует формальный параметрСинтаксическая ошибка: отсутствует имя после. операторОшибка синтаксиса: отсутствует имя переменнойСинтаксическая ошибка: отсутствует} после тела функцииСинтаксическая ошибка: отсутствует} после списка свойствСинтаксическая ошибка: повторное объявление формального параметра "x"Синтаксическая ошибка: возврат не в функцииСинтаксическая ошибка: проверка на равенство (==) ошибочно введена как присваивание (=)?Синтаксическая ошибка: незаконченный строковый литерал
Ошибка типа
Ошибка типа возникает, когда значение имеет тип, отличный от ожидаемого.
Самый простой пример – попытка вызвать число:
1() //TypeError: 1 is not a function
Вот наиболее распространенные ошибки типа, которые вы можете обнаружить в дикой природе:
Ошибка типа: "x" не имеет свойствОшибка типа: "x" - это (не) "y"Ошибка типа: "x" не является конструкторомОшибка типа: "x" не является функциейОшибка типа: "x" не является ненулевым объектомОшибка типа: "x" доступен только для чтенияОшибка типа: "x" не может быть повтореноОшибка типа: Нужно больше аргументовОшибка типа: Уменьшение пустого массива без начального значенияОшибка типа: не удается получить доступ к мертвому объектуОшибка типа: не удается получить доступ к свойству "x" из "y"Ошибка типа: не удается определить свойство "x": "obj" не является расширяемымОшибка типа: невозможно удалить не настраиваемый элемент массиваОшибка типа: невозможно переопределить не настраиваемое свойство "x"Ошибка типа: нельзя использовать оператор "в" для поиска "x" в "y"Ошибка типа: циклическое значение объектаОшибка типа: недопустимый "экземпляр" операнда "x"Ошибка типа: недопустимый аргумент Array.prototype.sortОшибка типа: недопустимые аргументыОшибка типа: недопустимое присвоение константе "x"Ошибка типа: свойство "x" не настраивается и не может быть удаленоОшибка типа: установка свойства "x" только для получателяОшибка типа: переменная "x" повторно объявляет аргумент
Ошибка Url
Эта ошибка возникает при вызове одной из глобальных функций, работающих с URI:
декодиРУЙ()Декодирующий компонент()Кодировка()Кодирующий компонент()
и передача недопустимого URI.
Оригинал: “https://flaviocopes.com/javascript-errors/”