Самоучитель по JavaScript



              

Урок 2 Сообщения об ошибках


Концепция

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

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

Урок №2
Сообщения об ошибках

Сегодня я собираюсь рассказать вам, как реагировать, если браузер сообщает об ошибке. Я такие окна видел тысячами. Начнете писать JavaScript, тоже получите свою долю.

Сообщение об ошибке

В основном бывают ошибки двух типов: синтаксиса и сценария. Ошибка синтаксиса означает опечатку или пропущенный текст. Ошибка сценария значит, что вы перепутали местами команды или вставили неправильные. Так или иначе, дело в одном — где-то вы напутали.
Существуют программы, которые помогают исправлять ошибки, этот процесс называется «debugging» («уничтожение багов, ошибок»), но я все же предпочитаю делать это вручную. На самом деле это даже легче, чем можно подумать.

Исправление ошибок

Говорят, что наилучший способ исправить ошибку — это ее не совершать, но сказать проще, чем сделать. Тем не менее можно свести ошибки к минимуму, пользуясь текстовым редактором без полей. Кроме того, отводите каждой команде JavaScript отдельную строку. Ни к чему разбивать длинные строки на несколько коротких. Это само по себе может привести к ошибке. И все же, готов спорить, что каждый раз, принимаясь за скрипты, вы будете получать такие сообщения. Так уж давайте разберемся, как их устранять.

В этих всплывающих окошках есть одна замечательная вещь: они сами говорят, где и в чем состоит проблема. Взгляните на сообщение. Это ошибка сценария, и находится она на строке 23. Более того, сообщение прямо говорит, в чем состоит ошибка. Разве не здорово было бы завести такой порядок и в HTML?

Строка ошибки

Строку с ошибкой нужно отсчитывать от самого верха документа HTML, а не от первой строки JavaScript. Например, в приведенном ниже документе допущена ошибка на строке 9. Это ошибка синтаксиса, так как пример (instance) не заканчивается на той же строке, где и начался. Видите, как скобкаперескочиланаследующую строчку?

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<SCRIPT LANGUAGE="javascript">
document.write("text for the page"
)
</SCRIPT>
</BODY>
</HTML>

Но почему ошибка на строке 9, а не 8? Потому, что вы начинаете считать с верхнего края документа HTML, не пропуская ни одной строчки. Вот этот документ еще раз с пронумерованными строчками.

(строка 1)  <HTML>
(строка 2)  <HEAD>
(строка 3)  <TITLE></TITLE>
(строка 4)  </HEAD>
(строка 5)  <BODY  
(строка 6)  
(строка 7)  <SCRIPT LANGUAGE="javascript">
(строка 8)  document.write("text for the page"  
(строка 9)  )
(строка 10) </SCRIPT> 
(строка 11) </BODY>  
(строка 11) </HTML>

Так что, считайте все строки, даже пустые.

Ну и что дальше?

Как только вы нашли строку с ошибкой, необходимо решить, что делать. Чаще всего это будет синтаксическая ошибка — либо разорванная строка, либо опечатка, либо двойные кавычки вместо одинарных и тому подобное.
Если это ошибка сценария, значит, команда, на которую указывает сообщение, не укладывается в логическую последовательность. Например, команда вызывает кнопку, а в скрипте на самом деле указано текстовое поле.

Многократные сообщения

Ничто не раздражает меня больше, чем многократные сообщения об ошибках. Можно только сидеть и смотреть, как на экране плодятся окошки. Когда-то я думал, что многократные окна означают многократные ошибки. Не всегда.
JavaScript — это чрезвычайно логичный язык, требующий, чтобы все шло своим чередом, друг за дружкой. Допустим, у вас 10 ошибок в длинном скрипте. Сообщения накладываются одно на другое, и последняя обнаруженная компьютером ошибка окажется сверху. Не набрасывайтесь на нее сразу, возможно, в действительности ее даже не существует.
Может случиться так, что первая ошибка в скрипте и вызовет все остальные. Так что исправлять их следует от начала документа HTML. Сколько раз было так, что у меня выскакивало штук 20 окон, а разрешить проблему удавалось исправлением одной единственной первой ошибки!
Поэтому я советую вам исправлять ошибки по одной от начала до конца. И каждый раз, исправив одну ошибку, запускайте скрипт. Можно получить 20 окошек с восклицательным знаком, а исправлять придется одну или две ошибки.

Определение отсутствует

Эта ошибка сценария тоже частенько встречается. Она означает, что в скрипте что-то не согласовано. Я всегда слежу за тем, чтобы не вписать какую-нибудь строку раньше, чем нужно. Если дело не в этом, попробуйте стереть строку с ошибкой, ведь ее всегда можно вернуть на место. Случаются и банальные опечатки. Приглядитесь к тексту повнимательнее, опечатки случаются чаще, чем можно себе представить.

Вот практически все, что на данном этапе можно сказать про ошибки. Теперь у вас хватит знаний, чтобы исправить 99% подобных неприятностей. Просто помните, что сообщение — это на самом деле плюс. Без них нам пришлось бы сидеть, тупо уставясь в пустую страницу, не имея ни малейшего понятия, в чем проблема.

Ваше задание

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

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

hotlog_js="1.0";hotlog_d=document; hotlog_n=navigator;hotlog_rn=Math.random(); hotlog_n_n=(hotlog_n.appName.substring(0,3)=="Mic")?0:1; hotlog_r=""+hotlog_rn+"&s=15862&r="+escape(hotlog_d.referrer)+"&pg="+ escape(window.location.href); hotlog_d.cookie="hotlog=1"; hotlog_r+="&c="+(hotlog_d.cookie?"Y":"N"); hotlog_d.cookie="hotlog=1; expires=Thu, 01-Jan-70 00:00:01 GMT" hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2";hotlog_s=screen; hotlog_r+="&wh="+hotlog_s.width+'x'+hotlog_s.height+"&px="+((hotlog_n_n==0)? hotlog_s.colorDepth:hotlog_s.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; hotlog_d.write("Урок №2
Сообщения об ошибках") Урок №2
Сообщения об ошибках var site="sm2jsp"   body









Содержание    Назад    Вперед