Опубликован: 19.10.2006 | Уровень: для всех | Доступ: платный
Лекция 11:

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

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >

Ошибки времени выполнения

Перейдем к ошибкам времени выполнения. После запуска кода на исполнение начинают появляться ошибки времени выполнения. Эти ошибки могут возникать в связи с множеством причин. Каждый из следующих далее блоков кода будет порождать ошибку:

alert(x); // 'x' не определено 

var x;

x[5] = 'test'; // 'x' будет null или не является объектом 


window.frames = 5; //  Не реализовано 


var for; // ожидается идентификатор 

document.doesNotExist(5);
// объект не поддерживает это свойство или метод 


alert(parseInt('5')); // ожидается объект

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

  • Неправильное использование прописных букв

    Все встроенные функции JavaScript используют специальную форму записи имен функций, предполагающую, что имя функции начинается со строчной буквы, а в начале каждого следующего слова будет использоваться прописная буква: parseInt, getElementById, createElement, appendChild, и т.д.

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

  • Ссылка на несуществующий код, функции или объекты DOM

    Эта проблема возникает обычно в отношении объектов DOM. Предположим, что имеется код, который изменяет некоторые элементы формы на странице. Если делается попытка выполнить этот код до появления элементов формы, например, если поместить его в тег <HEAD>, то будет получена ошибка JavaScript.

    Обычно эта проблема легко решается. Лучшим решением будет выполнение кода по событию onload, например:

    <BODY onload="loadFunction();">

    или еще лучше, присоединение события к загрузке тела:

    document.captureEvents(Event.LOAD);
    document.onLoad=loadFunction;
  • Использование зарезервированного слова

    Существует длинный список зарезервированных ключевых слов JavaScript. Если делается попытка использовать многие из них вне их специального контекста, как, например, запись

    var for = 5;

    то будет возникать ошибка.

  • Использование пропущенного параметра

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

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

Однако последний тип ошибки из этого списка с пропущенными параметрами можно проверить достаточно легко:

function myFunction(a, b, c){
  if(a){
    // выполняется работа с a
  }
  if(b && c){
    // выполняется работа с b и c
  }
}

Если функция вызывается только с одной переменной, то проблемы не возникает. Однако надо помнить об одной вещи: если входящая по значению переменная может быть определена как false (0 или false ), то код не будет работать. В связи с этим лучше проверять, что переменная не была определена:

function myFunction(a, b, c){
  if(typeof(a)!='undefined'){
    // выполнение кода с a
  }
  if((typeof(b)!='undefined') && (typeof(c)!='undefined')){
    // выполнение кода с b и c
  }
}

В этом случае, даже если одна из переменных будет передана как 0, false или null, код все равно будет работать.

Сейчас мы перейдем к изучению механизмов обработок ошибок - с помощью операторов Try/Catch и функции window.onerror.

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >
Елена Сапегова
Елена Сапегова

После прохождения теоретической части пришло письмо об окончании теоретической части курса, будет ли практическая часть?

Рустам Рахимов
Рустам Рахимов

Пол часа искал в интеренете, как что работает. Такое чувство что автор пишет для людей которые уже знают js, или просто хвастается своими знаниями. Конструкция формы непонятна. И можно было бы в кратце написать, что такое событие которое используют. Сорершенно не понятно как работает форма, и как брать из нее значение. 

function Complete() {

    var x = "Имя: " + document.tutform.firstname.value;

alert(x);

} - Так брать значение из формы tutform, firstname-получаем значение из имени. 

<INPUT TYPE="button" VALUE="Готово" onClick="Complete();"> - Нужно к кнопке прописать событие, при нажатие на кнопку готово, чтобы возвращалось значение с помощью функции. А так ничего не работает, и смысла учить нету, если не знать почему не работает.

 

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Олег Волков
Олег Волков
Россия, Балаково, МБОУ СОШ 19