WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 || 3 | 4 |   ...   | 10 |

«тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с другими ...»

-- [ Страница 2 ] --

А, возможно, вы замахнулись на создание сайта для проверки возможностей JavaScript?

Знакомство с JavaScript Часть I First Script ПРИМЕЧАНИЕ Атрибут src появился только в JavaScript Это зна чит, что полная его поддержка обеспечивается толь is ко браузерами Navigator 3+ и Internet Explorer 4+.

JavaScript is turned Перед началом выполнения проекта исключительно важно определить преследуемые цели. Далеко не всегда этот этап проделывается должным образом. Так сложи лось, что многие программисты смотрят на задачу раз Детально исследуя листинг и рис. 4.2, несложно работки сценария с позиций а не с функци заметить, что в разделе

дится сообщение, гласящее что JavaScript отключен.

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

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

2 и ранние версии Internet Explorer, дескриптор Подумайте о дополнительных накладных расходах при

JavaScript, когда данный дескриптор на странице ис Выделяя цели, как можно более полно определите пользовался более одного раза. Кажется, эти пробле конечные результаты будущей программы. Например, мы в большей степени относятся к семейству браузе может потребоваться проверка ошибок при заполнении ров Navigator.

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

форме, т.е. сколько переключателей, текстовых полей, Последний вопрос, который следует решить перед на- флажков и т.п.

чалом составления кода, — как размещать его на страни- После преодоления второго уровня целей можно це. Предполагается, что вы уже располагаете функция- приступать к проблематике кодирования сценария.

ми, переменными и пр., которые требуется разместить Потребуется реализовать код для поддержки переклю в рамках действия дескриптора . Весь вопрос в чателей, текстовых полей и флажков. Можно создать том, поместить ли код во внешний файл и сослаться функцию, получающую параметр (скажем, radio), ко на него в атрибуте src дескриптора = I используемый вами браузер либо не поддерживает JavaScript, либо упомянутая возможность В листинге 4.4 в дескриптора JavaScript следует учесть необходимость выпол нения всех указаний, касающихся строковых литералов, в качестве параметров. В ряде случаев допускается применять оба типа кавычек при помеще, i нии одного строкового литерала внутрь другого. После '. i I днее не разрешается при указании управляющих кодов, •.

речь о которых идет ниже.

.

Jeff Специальные символы Bill fciia@.;

ompany, com Иногда в сценарии может потребоваться использовать специальный знак либо их комбинацию, например, табуляции или новой строки. В этом случае уп равляющий код должен предваряться символом наклон ной черты влево (\), как показано ниже:

'.

' i i \Ь — забой РИСУНОК 5.1. Выравнивание текста при помощи табуляции.

\f — перевод страницы — новая строка Специальные знаки оказывают воздействие только ког да используются в пределах предварительно отформа — возврат каретки тированного текстового блока, потому-то сценарий дол \t — табуляция жен помещаться в пару дескрипторов и \\ - наклонная черта влево Если строковый литерал должен воспроизводить сим V — одинарная кавычка волы кавычек, применяйте их в паре с символом наклон — двойная кавычка ной черты влево.

подмножество JavaScript Часть II важнее Вот еще корректные имена:

Этот сценарий обеспечит отображение на экране следующей строки:

Когда имя переменной по смыслу содержит одно важнее Эйнштейн слово, при ее записи принято использовать строчные Операции буквы, а вот при наличии в имени смысловых двух или трех слов, то первое слово начинается со строчной, а все Операции (operators) — это символы или идентификато последующие — с прописных. Обычно мои имена пе ры, которые представляют способ или манипу ременных заключают в себе два-три слова, обеспе ляции комбинациями выражений. Наиболее использу чивает гораздо лучшее понимание смысла определения емой общей операцией является далеко не операция переменной.

присваивания. В примере х=10 как собственно 10, так Предположим для примера, что требуется перемен и переменная х — это выражения. Когда JavaScript ная с логическим значением (true or false), которая уве встречает операцию присваивания между двумя выра домляет, завершил ли посетитель Web-страницы ввод жениями, выполняются действия в соответствие с пра своего имени в текстовом поле. Если имя переменной вилами оператора присваивания. В рассматриваемом выглядит наподобие finish, другой программист с удив случае значение выражения в правой части присваива лением подумает: "Что это — флаг, при помощи кото ется переменной в левой части. Наряду с арифметичес рого можно выяснить, завершены ли пользовательские кими, JavaScript поддерживает 30 других операций, действия? А, может быть, это — строковое выражение, которые более подробно рассматриваются в главе 6.

которое записывают после того, как посетитель завер шил операцию, скажем, сообщение о благодарности?" Переменные В данном случае гораздо лучшим выбором имя Переменная (variable) — это имя, присваиваемое ячейке isDone. Использование в качестве приставки слова is памяти компьютера, которая хранит определенные дан позволяет рассматривать переменную как вопрос, на ные. Праотцы программирования тратили уйму време который требуется ответ "да" или "нет", а это, в свою ни на трансляцию наподобие сообщения "Hello очередь, означает, что переменная хранит логические World", в двоичные коды. Затем они искали свободное значения. Если посетитель завершил ввод своего имени, место в компьютерной памяти для размещения всех isDone присваивается значение true, в противном слу полученных единичек и ноликов, не забывая запомнить чае — false.

адрес начала и завершения этих данных. При помощи Несмотря на то что размер имени переменной упомянутых адресов ячеек памяти можно было нахо JavaScript ограничивается только объемом оперативной дить, изменять и считывать данные. В общем, никогда памяти, все же подходить к данному вопросу лучше с не завершающийся день сурка. (Да здравствует День практической точки зрения. Я советовал использовать не более 20 символов, т.е. 2-3 слова. При написании Нынешним программистам повезло больше — им на сценария не стоит заходить за конец строки. Этому спо помощь пришли переменные, и жизнь их пошла на су собствуют длинные имена переменных, к тому же они щественную поправку, поскольку сохранение, измене нарушают целостность восприятия кода.

ние и чтение данных стало теперь как никогда простым.

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

или переменной цикла. Поскольку данные способы — тра диционные, их можно использовать каждый раз, когда Проблема именования нужным.

Имя переменной в JavaScript состоит из одной и более Работая в профессиональном окружении, потребу букв и цифры и символов подчеркива ется обеспечить удобочитаемость написанного кода для (_). однако не может начинаться с цифры. Следу других разработчиков. В этом смысле ющих два имени JavaScript воспринимает как различ помощь окажут непротиворечивые и осмысленные со ные:

глашения об именовании. Плохо или недостаточно про думанные соглашения ничего кроме головной боли не принесут, да и могут отрицательно сказаться на осно Основы языка JavaScript Глава показателях компании как разработчика В дополнение к ключевому слову var, JavaScript программного обеспечения. предлагает и другой способ объявления переменных при помощи обычной их инициализации. Если присво Объявление переменных ить новой переменной значение перед ее объявлением Для того чтобы уведомить JavaScript о том, что конк- при помощи var, то JavaScript автоматически объявит ее.

ретный идентификатор должен использоваться в каче стве переменной, в первую очередь, его потребуется В ранних версиях JavaScript-браузеров объявление пе объявить. Для объявления переменных в JavaScript ис ременных без слова var означало их автоматическое пользуется ключевое слово var, за которым следует но объявление с глобальной областью действия (или ви вое имя переменной. Имя будет резервироваться как пе димости). Может возникнуть впечатление, что это ременная, которую можно использовать в качестве сокращает накладные расходы, однако хорошая прак области памяти для хранения любых данных. Следую- тика программирования предполагает именно явное объявление переменных. При помощи слова var щий пример демонстрирует возможность одновремен поддерживается концепция области действия переменной.

ного объявления нескольких переменных (между от дельными именами должны ставится запятые).

Типы var При сохранении порции данных (более известных под var var именем JavaScript автоматически относит ее var к одной из пяти категорий. В табл. 5.7 сведены различ ные типы данных, поддерживаемые JavaScript.

После объявления переменной можно присваивать начальное значение. Подобное действие носит название Таблица 5.7. Типы данных JavaScript.

инициализации и выполняется при помощи операцией Тип присваивания =.

number false Знак равенства (=) используется для присваивания пе ременной определенного значения. Проблемы, связан- string "Элементарно, дорогой ные с оператором подробно рассмат function unescape, write риваются в главе 6.

object window, document, null Переменную можно инициализировать непосред ственно при ее объявлении либо позже, в любом месте Переменные типа number хранят действительные сценария. Установка начального значения переменной или целые числа, boolean — значения true или false, a во время объявления упрощает запоминание, какой тип string содержат строковые литералы, включая пустую значений первоначально планировалось хранить в пере- строку. В табл. 5.7 пустая строка представляется с по менной. Уточним предыдущий пример, добавив необ- мощью двух двойных кавычек. Функциональный тип ходимые инициализации:

(function) либо определяется либо отно сится к встроенным функциям. Например, функция var = var n = unescape является встроенной в JavaScript. Проблемати var i = j = ке создания функций, определяемых пользователем, по var isMouseOverLink = свящается глава 8.

var helloMessage = "Hello, thank you for Функции, принадлежащие объектам, в JavaScript k = 0;

называются методами (methods). Они также относятся к Несложно заметить, что все переменные, кроме k, типу данных function. Базовые клиентские объекты были во время объявления, a k JavaScript, такие как window или document, имеют тип позже. JavaScript читает строки кода данных object. Переменные типа object, или просто сверху вниз, выполняя директивы одну за другой. До объекты, могут хранить объекты. Переменная со значе инициализации переменная остается неопределенной нием null относится к типу object. Инициализация пе (undefined), поэтому прочитать ее значение нельзя. По ременной значением null позволяет избежать ошибок, пытка чтения значения переменной перед ее инициа если нет уверенности в будущем ее использовании.

лизацией приведет к ошибке во время выполнения при Как правило, в других языках программирования ложения. JavaScript дает возможность проверить, было требуется определять тип данных, представляемых но ли присвоено значение переменной, с помощью опера вой переменной. На протяжении всей программы тип тора (см. главу 6).

любого значения, присваиваемого переменной, должен подмножество языка JavaScript Часть II быть определенным и неизменным. Более того, если дескрипторов Не забудьте захватить семьи!

РИСУНОК 5.3. Изменение текста в JavaScript.

Шестнадцатиричная строка для каждого цвета пред Типы данных ставляет собой комбинацию значений RGB (red/green/ blue — красный/зеленый/голубой), лежащих в основе Несмотря на недавнее обсуждение основных типов дан каждого цвета. Например, шестнадцатиричное значение ных, присваиваемых переменным, стоит напомнить, что для цвета морской волны (aqua) выглядит как #OOFFFF.

функции и объекты относятся к специальным типам В приведенном значении RGB: 00 — красный, FF — зе данных. Они предлагают достаточно интересные спо леный и FF — голубой. Две цифры в шестнадцатиричном собы сохранения и манипулирования данными сцена значении позволяют определять 256 оттенков каждого рия. Особенности использования функций и объектов цвета. В цвете морской волны красная составляющая рассматриваются в главе 8.

равна 0, а это означает отсутствие в нем красного цве Выражения та. Интенсивности зеленого и голубого максимальны.

Обеспечив соответствующие пропорции зеленого и го Выражение (expression) — это набор операторов, которые лубого в результате приводят к цвету морской волны.

подобно группе объединяется в одно значение. Результи Имея 256 комбинаций красного, синего и зеленого мож рующее значение будет относиться к одному из следую но скомпоновать около миллионов цветов, однако не щих типов данных: boolean, number, string, function, object.

Таблица 5.8. Значения цветов с их шестнадцатиричными эквивалентами.

Цвет R G В Цвет R G В aliceblue FO F8 FF antiquewhite FA EB aqua 00 FF,' F aquamarine 7F azure FO FF Fl beige F5 F5 DC bisque ! black 00 00 blanchedalmond FF CD blue 00 blueviolet 2B E2 brown 2A 2A B8 87 cadetblue 5F ЭЕ АО chartreuse 00 chocolate coral 7F 50 64 95 El cornsilk \ I X. crimson DC cyan DO Fl FF 00 00 8B darkcyan 8B 8B B8 OB A9 A9 00 64 •;

7 6B darkmagenta 8B 00 HI Основы языка JavaScript Глава Цвет R G В Цвет R G В darkolivegreen 55 6B darkorange FF 8C 99 32 cc darkred 8B 00 : 9 96 г л darkseagreen BC 8F 48 8В darkslategray 4F, darkviolet 94 00 D deeppink FF 93 deepskyblue 00 F 69 69 69 dodgerblue IE 90 FF firebrick B2 22 22 floralwhite FF ! A i forestgreen 22 8B 22 fuchsia Fl 00 Г F gainsboro DC DC DC F8 FF gold FF D7 00 goldenrod DA gray 80 80 80 green 00 80 I IT honeydew FO FO 69 indianred CD 5C indigo 00 82 ivory FF FF FO khaki E6 8C lavender E6 E6 A F FO F5 lawngreen 7C FC F i A CD lightblue AD ho f FO 80 80 FF FF lightgoldenrodyellow FA A D2 lightgreen 90 D3 D3 D3 lightpink Fl B FF АО lightseagreen 20 B2 AA 87 СЕ F A lightslategray 77 88 BO C4 Dl lightyellow FF FF EO lime FF 00 limegreen 32 CD linen FA FO E6 magenta FF 00 FF maroon 00 00 mediumaquamarine 66 CD 00 00 CD BA 55 D 93 3C B3 68 FF mediumspringgreen 00 A 9A mediumturquoise 48 CC mediumvioletred С 7 15 midnightblue 19 70 mintcream F5 F mistyrose FF E4 moccasin FF E4 В ! I D! navy 00 00 oldlace FD F5 E6 olive 80 80 olivedrab 8E 23 orange : i orangered FF 45 00 orchid DA 70 D palegoldenrod ЕЕ E8 AA palegreen 98 FB AF ЕЕ palevioletred DB 70 El D5 peachpuff FF DA B peru CD 85 pink FF CO С В plum АО powderblue BO E purple 80 00 80 red FF 00 BC 8F royalblue 41 69 Г i 8B 45 salmon FA 80 sandybrown F4 60 seagreen 2E 8B FF F5 ЕЕ sienna АО 52 2D Базовое подмножество языка JavaScript Часть II Цвет R В Цвет R G В silver CO CO 87 '. '.

slateblue 5A CD slategray 70 ' snow i springgreen 00 FF.

46 teal 80 thistle D i tomato 63 turquoise Ю DO violet E ' \ wheat 5 D white I ! F whitesmoke F5 yellow • Fl : IA CD // Комментарий Выражение может быть простым, как отдельное чис /* Многострочный ло или переменная, а также включать в себя переменные, комментарий / ключевые слова и операции. Например, х= Листинг 5.4 демонстрирует применение обоих типов присваивает значение 10 переменной х. Приведенное комментариев. Две косых черты не обеспечат сокрытие выражение дает результат 10, потому применение вы кода от старых браузеров. Дабы не создавать трудностей ражения в строке а-ля — впол упомянутым браузерам, для обрамления про не допустимо.

должайте прибегать к паре . Все, что в лис JavaScript мог бы рассматривать информацию, зак тинге 5.5 закомментировано, на экране отображаться не люченную в кавычки, как строку и просто отображать будет (см. рис. 5.4).

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

только после этого осуществляется собственно отобра жение значения на экране. В рассматриваемом приме ре на экран выводится 10. в Кстати, просто х — тоже допустимое выражение. В данном случае выполняется только чтение значения Две косых черты (//) "скрывают" текст вплоть до конца текущей строки. Допускаются и многострочные комментарии:

сокрытия определенного кода от ин /* Желаете поместить в комментарий несколько строк? Так вот терпретации JavaScript дает возможность документиро и */ вать сценарии. Совсем неплохо по ходу пьесы добавлять заметки, связанные с дизайном, дружеские напомина В обоих типах комментариев излишние пробелы иг норируются, поэтому оба следующих примера коррект- ния или предупреждения. Это окажет существенную ны:

Основы языка JavaScript Глава ПРИМЕЧАНИЕ помощь для других в плане понимания, что означают те или иные разделы программы. Советую объявлять переменные в разделе HTML-документа. Это позволит получить уверенность, что функция загрузится браузером до ее выполнения в разделе .

Для вызова функции достаточно поместить ее имя в любом месте программы. Главная программа размеща Jon ется внутри раздела и обрамляется парой деск e-mail address: jsimpson@company.com рипторов ки сценариев. Для целей тестирования можно упрятать часть своего кода, а после его отладки с легкостью вер нуть, удалив всего лишь символы комментария. В отли вызываемые по имени в любой момент. Разумеется, они призваны серьезно расширить возможности JavaScript.

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

вся программа или ее часть перешла в режим ожидания.

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

Вот и все, было.

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

В листинге 5.5 показан один из способов использо вания функций JavaScript. Первое, на что стоит обратить внимание — где будет объявляться функция. Объявлять i не только переменные, но и функции. Не забудь РИСУНОК 5.5. Вызов функции в JavaScript.

те все объявления функций поместить в пару дескрип торов Базовое языка JavaScript Часть II Начав с главного сценария, JavaScript, как обычно, Сценарии помещаются непосредственно в HTML выполняет первую строку, а затем попадает на вызов документы и обрамляются парой чение 1, поскольку результатом деления 10 на 3 будет 3 с остатком 1. При помощи операции взятия по моду лю можно легко определить, что одно число является множителем другого: при этом модуль этих двух чисел После исследования кода, представленного в лис будет равен 0. Это истинно, например, для выражения тинге важно понять, в какой момент увеличивает х = 25 % 5. 25 разделить на 5 равно 5 без остатка, зна ся значение переменной i — перед или после вычисле чит х будет равно 0.

ния выражения.

В первом примере переменная result получает пер воначальное значение i плюс 1. Во втором примере ре В ряде случаев Netscape Navigator возвращает непра зультат устанавливается равным первоначальному зна- вильные значения, когда имеет дело с дробями. На пример, 10/3 должно вернуть 3 В окне консоли i до выполнения инкремента i. Два следующих Netscape в качестве результата вычисления 10/3 ото примера работают аналогичным образом, однако при бражается 3.3333333333333335. Небольшая погреш менительно к операции декремента.

ность в шестнадцатом знаке после десятичной точки Результаты вычислений этих четырех примеров по связана со способом, по которому дроби хранятся в казаны на рис. 6.2. Хотя это может показаться и ненуж памяти компьютера. Internet Explorer реша ет эту проблему, отображая только 14 знаков после ным, особенности принесут несомненную запятой. В этом случае результатом того же вычис при записи повторяющихся частей сценария. Дан ления будет 3.33333333333333.

ная освещается в главе 7.

Унарная операция отрицания (-) применяется в слу чаях, когда требуется заменить положительное значение Операции сравнения на отрицательное и наоборот. Она названа унарной, т.к.

Операции сравнения используются именно для сравне работает только с одним операндом. Если, например, ния выражений. Выражения, которые используют Базовое подмножество языка Часть II рации сравнения, отвечают на вопрос, связанный с дву- Операция Описание мя значениями. Ответом может быть true или false.

Операция "меньше". Возвращает true, если Два знака "равно" (==) обозначают операцию равен значение левого операнда меньше значения ства. Использовать операцию равенства между двумя правого операнда.

операндами — означает определить, являются ли зна Операция "меньше либо равно". Возвращает чения этих двух операндов равными. Листинг 6.2 де true, если значение левого операнда меньше монстрирует способ отображения результатов при вы- либо равно значения правого операнда.

яснении равенства двух переменных.

Листинг 6.2. Использование операции равенства.

• • Равны пи х и у (х — у)? true по которому будет следовать сценарий. Более подроб но эта темя рассматривается в главе 7.

ОПЕРАЦИИ СРАВНЕНИЯ В РЕАЛИЗАЦИИ JAVASCRIPT 1. В NAVIGATOR Необходимо убедиться, что при написании програм До появления JavaScript 1.1 язык был очень терпим к мы используется именно требуемая операция. Еще раз сравнению операндов типов. Например, при следует подчеркнуть, что операция равенства (==) про сравнении числа 7 со строкой "7" JavaScript сначала веряет, являются ли два значения равными, тогда как преобразовывал, или операнд строки к чис операция присваивания (=) устанавливает значение лу и затем выполнялось сравнение. Для примера с переменной. В случае использования не той операции и "7", операнды считались равными.

интерпретатор JavaScript даст об этом знать. На рис. 6. В JavaScript 1.2 программист должен сначала преоб разовать строку в числовую форму либо число в стро показаны результаты выполнения кода из листинга 6.2.

ку. Если этого не сделать, JavaScript никогда не ска В табл. 6.1 приведен список всех операций сравне жет, что они равны. Листинг 6.3 показывает способ ния.

сравнения строки и числа, который возвращает одни и те же результаты для всех версий JavaScript. На рис.

Таблица 6.1. Операции сравнения.

6.4 приведена реакция JavaScript 1.2 на три различных Операция Описание сценария. Листинг 6.3 может запускаться только в браузерах, поддерживающих JavaScript 1.2, например, Операция равенства. Возвращает true, если в Netscape Navigator 4.0-4.04.

операнды равны между собой.

!= Операция неравенства. Возвращает true, если Листинг 6.3. Тестирование различных версий операнды не равны между собой.

JavaScript. _ Операция "больше". Возвращает true, если значение левого операнда больше значения правого операнда.

Операция "больше либо равно". Возвращает true, если значение левого операнда больше либо равно значения правого операнда.

== document (x 3) "7" : ) и выше true у == true код всех версий.

- 0 true + у Строковые операции 1 i Набор строковых операций, доступный в JavaScript, РИСУНОК 6.4. Сравнение строк и чисел из листинга 6.3.

включает все операции сравнения и операцию конкате нации (+). При помощи операции конкатенации стро- Сначала сценарий выполняет инициализацию трех ки соединяются вместе в одну длинную строку (см. переменных, хранящих три части Web-адреса. Затем все листинг 6.4).

три части соединяются вместе и разделяются необходи мыми точками, присутствующими во всех Web-адресах.

Листинг 6.4. строк.

Далее выполняется проверка, содержит ли sumOfParts определенный адрес Internet.

Рисунок 6.5 отражает тот факт, что JavaScript при сравнении строк учитывает регистр символов. Сравне Базовое подмножество языка JavaScript Часть II var = (numHits 1000000) ? "Со ние выполняется слева направо, по каж : "На дого символа в обеих строках. Если все коды соответ ствуют друг другу, строки равны. Все прописные буквы При условии, что numHits равен 1000000 в любом имеют коды, меньшие, чем их эквиваленты в нижнем месте программы, это выражение возвращает строку "Со регистре, потому и последнее сравнение в листинге 6. в противном случае "На Вторая true.

строка приведенного примера результат для пользователя при помощи функции Условное выражение может применяться для возвра та данных любого типа, например, number или boolean.

Следующее выражение возвращает строку или число в зависимости от значения useString:

Part a equal to Part b is to Part с is equal to var result = useString ? "семь" :

Is equal to WWW.COMPANY.COM?

Is equal to Булевы операции Булевы операции (также называемые логическими) используются в дополнение к выражениям, возвраща ющим логические значения. Действие этих операций проще понять, изучив их использование совместно с операциями сравнения. Таблица 6.2 содержит описа РИСУНОК 6.5. Результат выполнения кода 6.4.

ние трех булевых операций. Приведены примеры с синтаксисом expressioni [operator] expression2 и с [operator]expression.

Условные операции Две операции ? и : используются для формирования typeof условных выражений. Эти условные операции выпол няют те же действия, что и оператор if. Условное выра- Операция typeof возвращает тип данных, хранящихся в жение возвращает одно из двух значений, в зависимос- операнде в текущий момент времени. Это оказывается ти от логического значения какого-то выражения. особенно полезным при выяснении, была ли определе Например, следующее условное выражение будет на переменная. Рассмотрим следующие примеры:

сообщать пользователю;

что он — миллионный посети typeof unescape возвращает строку тель страницы:

typeof строку "undefined".

Таблица 6.2. Булевы операции.

Операция Описание && Логическая операция И (конъюнкция). Возвращает true, если оба выражения expressioni и имеют значения true. В противном случае возвращается false. Рассмотрим примеры:

(1 > 0) && (2 > 1) возвращает true.

(1 > 0) && (2 < 1) возвращает false.

Логическая операция ИЛИ (дизъюнкция). Возвращает true, если хотя бы одно из значений expressioni или expression2 равно true. Если ни одно из expressioni и не равно true, возвращается false.

Рассмотрим примеры:

(1 > 0) || (2 < 1) возвращает true.

(1 < 0) (2 < 1) возвращает false.

Логическая операция НЕ (отрицание) —унарная операция, которая возвращает противоположное значение булева выражения. Если expression равно true, возвращается false, а если expression — false, возвращается true. Эта операция не изменяет значения выражения, поскольку работает подобно арифметической операции отрицания. Рассмотрим примеры:

! (1 > 0) возвращает false.

! (1 < 0) возвращает true.

Операции Глава typeof 33 возвращает строку может быть переменная, функция или целый объект), принадлежащему определенному объекту. Синтаксис typeof "A String" возвращает строку операции таков:

typeof true возвращает строку typeof null возвращает строку "object".

ИЛИ f Операция была добавлена в Navigator 3. ИЛИ (JavaScript Она будет работать только в JavaScript 1.1 и старших версиях браузеров.

Часть данных, к которой обращаются, должна стоять Определение и вызов функций справа от точки. Такой способ обращения к члену струк туры (к переменной, функции или объекту) обычно на Функции подробно рассматриваются в главе 8. Сейчас зывается "точечной нотацией".

ознакомимся с двумя операциями, имеющими отноше Операция индексирования применяется при обраще ние к функциям. Первая — операция, которая обозна нии к части данных из массива. Обозначается она па чается круглыми скобками и всегда следует за именем рой квадратных скобок и позволяет получить доступ к функции. функция объявля любому элементу массива. Массивы в JavaScript реали ется следующим образом:

зованы в виде объектов (см. главу 10). Ниже показан синтаксис операции индексирования:

function ;

[ Операция индексирования предполагает использова Операция вызова функции также используется при ние целого числа (индекса элемента массива) indexNumber.

функции из любого места сценария:

определяет индекс в arrayName и обеспе чивает доступ к любому члену массива.

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

На аппаратном уровне данные хранятся в памяти пораз Вторая операция записывается символом запятой.

Она используется для отделения друг от друга аргумен- рядно. Они записываются в двоичной системе счисле ния, в которой любое целое число может быть представ тов функции. Аргументы всегда заключаются в круглые лено при помощи символов 0 и 1. В зависимости от скобки. Функция displayName() с двумя аргументами размещения, каждый единичный разряд представляет могла бы выглядеть так:

значение 2 в степени п, где п — номер разряда, считая function displayName { справа.

[ операторы Например, целое число 12 может быть представле но двоичным кодом 1100:

О х 2° + О + 1 х + 1 х Операции со структурами данных Для хранения большого числа, скажем со структурами данных — термин, который в двоичном коде), потребуется 8 разрядов памяти:

используется при классификации двух операций, необ ходимых для работы со структурами данных. Структу 0 х ры данных — это концептуальные основы, применяе- + 1 + 1 х = мые для хранения одной или более базовых частей Для целочисленных значений в памяти данных организованным способом. В JavaScript таковы отводится 32 разряда. В памяти число 237 фактически ми структурами являются объекты, группирующие дан выглядит как но ные для конкретных целей.

для краткости незначащие нули не указываются. Не уже знакомая тем, кто имел дело с объек смотря на то что целое число можно записывать в де обычно называется "точка". Обозначается она сятичном, восьмеричном или шестнадцатиричном виде, точкой (.) и носит название операцией взятия члена в памяти оно хранится в двоичной форме.

структуры. Она позволяет обращаться к члену (коим Базовое подмножество языка JavaScript Часть II х = ~ Для представления отрицательных значений исполь х = зуется крайний слева (самый старший) разряд. Взгляни х = - те на следующие примеры:

10000000000000000000000000000001 = -2147483648 + Поразрядные логические операции 1 = - 10000000000000000000000000000011 = -2147483648 + Поразрядные логические операции опе 3 = - ранды поразрядно. Операция выполняется над каждой 11111111111111111111111111111111 = -2147483648 + парой разрядов. Например, применение поразрядной 2147483647 = - операции И к числам и дает в результате 11111111111111111111111111111110 = -2147483648 + 2147483646 = - число 01011. В табл. 6.3 показан ход выполнения при веденного примера.

Работа с двоичными представлениями целых чисел в JavaScript обеспечивается через поразрядные операции.

Поразрядные операции сдвига Самая простая из поразрядных операций — унарная опе Все поразрядные операции сдвига требуют двух опе рация дополнения до единицы, которая обозначается тиль рандов. Левый операнд — это целое число, разряды ко дой (~). Она изменяет значение каждого разряда операнда торого будут сдвигаться. Правый операнд задает коли на противоположное, поэтому относится к операциям чество разрядов, на которое необходимо сдвинуть отрицания. Рассмотрим, как выполняется дополнение до двоичное представление целого числа. Таблица 6.4 со единицы для числа 6:

держит список поразрядных операций сдвига.

X = ~ Таблица 6.3. Использование поразрядных логических операций.

Выражение Результат 0 & 1 & 1 I 1 &0 :

1 & 1 I 1 & •. Поразрядная операция И возвращает если оба операнда равны Иначе возвращается 0. Например, 15 & 27 возвращает возвращает Поразрядная операция ИЛИ возвращает если хотя бы один из операндов равен Иначе возвращается 0.

Например, 15 | 27 возвращает 31 (01111 | 11011 возвращает Поразрядная операция ИСКЛЮЧАЮЩЕЕ ИЛИ возвращает если только один из операндов равен но не оба. Иначе возвращается 0. Например, 15 " 27 возвращает 20 | 11011 возвращает 10100).

Таблица 6.4. Поразрядные операции сдвига.

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

Появившиеся младшие разряды заполняются нулями. Два следующих примера демонстрируют сдвиг числа влево на 1 и на 2 разряда:

15 1 возвращает 30 (1111 1 возвращает 15 2 возвращает 60 (1111 возвращает 111100) Обратите внимание, что сдвиг положительного целого числа влево на п разрядов эквивалентен умножению этого числа п раз на 2. В большинстве случаев компьютер выполняет сдвиг влево быстрее умножения на 2.

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

Применение сдвига влево к отрицательному целому числу приводит к отрицательному или положительному целому числу — в зависимости от значения старшего разряда после выполнения сдвига влево.

Операция сдвига вправо с копированием знака (арифметический сдвиг вправо) возвращает значение целого числа со сдвигом его разрядов на несколько позиций вправо. Все пустые разряды заполняются копией крайнего левого (т.е. знакового) разряда. Копирование крайнего левого разряда гарантирует, что целое число останется положительным или отрицательным. Применение данной операции также представляет собой Операции Глава Операция Описание более эффективный способ деления положительного четного целого числа на 2. В случае положительного нечетного целого числа арифметический сдвиг вправо то же самое, что и деление раз на 2 с отбрасыванием остатка. Рассмотрим следующие примеры:

15 1 возвращает 7 (1111 > > 1 возвращает 0111) -15 1 (11111111111111111111111111110001 1 возвращает Операция сдвига вправо с заполнением нулями возвращает значение целого числа со сдвигом его разрядов на несколько позиций вправо. При этом все пустые старшие разряды заполняются нулями. Воздействие на положительные целые числа этой операции обеспечивает тот же самый результат, что и операция логического сдвига вправо. Так получается ввиду того, что копируемый знаковый разряд для положительных целых чисел — всегда нуль. Что касается отрицательных целых чисел, то операция логического сдвига вправо изменит значение старшего разряда с 1 на 0. Результат будет всегда целым числом, большим или равным 0.

Рассмотрим несколько примеров:

15 1 возвращает 7 1 возвращает возвращает 2147483640 (11111111111111111111111111110001 1 возвращает да. В 32-разрядном целом числе 4 младших разряда па Зачем вообще возиться с разрядами?

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

придется. Однако, в некоторых случаях без такой воз- Для того чтобы прочитать только 4 разряда, исполь можности не обойтись. зуется операция & и управляющее значение. Управля Примером может послужить перевод числа из деся- ющее значение должно хранить 1 в каждом разряде, тичной системы счисления в шестнадцатиричную. Это соответствующем читаемому разряду целого числа. По потребует некоторых дополнительных усилий, т.к. скольку требуется значение первых 4 разрядов, управ JavaScript позволяет отображать только десятичные ляющее значение должно содержать 1 в первых четырех представления чисел, хранящихся в памяти. Встроенные разрядах. Все другие разряды должны содержать 0. Для способы отображения чисел в других системах счисле- чтения младших четырех разрядов управляющее значе ния отсутствуют. Используя поразрядные операции, ние должно быть равно 1111 (15 или OxF):

преодолеть упомянутое препятствие относительно про Управляющее значение:

сто. Например, переменная х хранится в памяти в дво 00000000000000000000000000001111 & ичном коде. Показанный ниже код обеспечивает вывод Преобразуемое целое:

значения переменной х в десятичном представлении 00000000000000000000000011011100 = (т.е. 220):

Результат:

var х = // числа Результат — это копия первых 4 разрядов преобра зовываемого целого числа. Сравните его с каждой из В JavaScript не существует какого-либо способа ото шестнадцатиричных цифр и убедитесь, что оно равно бражения 220 в шестнадцатиричном формате (т.е. DC).

С. Чтобы найти следующую циф Функция подобного рода оказалась бы весьма полезной ру, необходимо скопировать следующих 4 разряда это при с кодами цветов HTML, которые за- го целого числа. Это лучше всего сделать путем сдвига в шестнадцатиричной системе. Самый про всех разрядов целого числа на 4 позиции вправо и за стой способ получить шестнадцатиричное число — взять тем воспользоваться тем же управляющим значением:

двоичный код целого числа и перевести его в шестнад Управляющее значение:

цатиричный. Точно так же шестнадцатиричные коды 00000000000000000000000000001111 & достаточно просто переводятся в двоичные.

Преобразуемое целое:

Четыре разряда памяти могут определять 16 различ 00000000000000000000000000001101 = ных Поскольку для записи шестнадцатирич Результат:

ных кодов применяются 16 цифр, для хранения каждой шестнадцатиричной цифры требуется как раз 4 разря подмножество языка JavaScript Часть II Результат соответствует цифре D. преобразуемое значение. Затем отобразить зна Листинг 6.5 демонстрирует рассмотренный алгоритм чение, дабы подчеркнуть тот факт, что JavaScript ото целиком. Используя только операции, упомянутые ра- бражает только десятичное значение DC, т.е. 220. Да нее, можно преобразовать любое 8-разрядное число в лее выполняется перевод двоичной формы числа 220 в строковое представление его шестнадцатиричного экви- шестнадцатиричную и отображение результата (см. рис.

валента. Для этого сначала надо 6.6).

Листинг 6.5. Преобразование десятичного числа в шестнадцатиричное с использованием поразрядных операций.

десятичного числа в у кого-то ведь может и не хватить памяти. Но даже при нимая во внимание сказанное, волноваться по поводу нехватки памяти нужно начинать только, когда в памяти хранится достаточно много данных.

При целых в памяти. JavaScript их десятичные э 220 в в формате:

Приоритеты выполнения операций При создании выражений, которые включают более одной операции, необходимо помнить, что JavaScript не обязательно вычисляет выражение справа налево или наоборот. Каждая часть выражения вычисляется в по рядке, основанном на приоритете каждой операции.

Рассмотрим такой пример:

РИСУНОК б.б. Преобразование десятичного числа в х = а * ь + с шестнадцатиричное.

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

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

При исследовании предыдущего примера обратите х = а * с) внимание на то, сколько нулевых разрядов остались неиспользованными при хранении относительно не- Круглые скобки — это операция, которая увеличи большого числа. Это — еще одна область, в которой вает приоритет заключенного в них выражения. Одно поразрядные операции оказываются полезными. При типные операции вычисляются слева направо.

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

Например, если сценарий работает с большой груп Таблица 6.5. Приоритеты операций.

пой положительных целых чисел, не 255, Название операции Операция то в одном 32-разрядном слове поместятся четыре та ких числа. Используя простую поразрядную операцию, Запятая можно извлекать любое из этих чисел. Стоит отметить, Присваивание 6= что с такими объемами ОЗУ, которые имеют на сегод- &= няшний день большинство компьютеров, экономия про Условие странства обычно не стоит затраченных на его добыва Логическое ИЛИ ние усилий. С другой стороны, поскольку JavaScript Логическое И для выполнения на различных платформах, Поразрядное ИЛИ нельзя знать заранее, кто будет выполнять сценарий, — Поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ Базовое подмножество языка JavaScript Часть дополнительных операции присваивания, которые на операции Операция самом деле являются комбинациями арифметических Поразрядное И или поразрядных операций с простой при Равенство сваивания.

Сравнение Поразрядный сдвиг ' Сложение/вычитание.

Умножение/деление Отрицание/приращение в Вызов/структурирование данных Длина в Один из эффектов, связанных с приоритетами опе раций, заключается в определении типа данных резуль тата выражения. Это станет очевидным при попытке конкатенации строк и (см. листинг 6.6).

Листинг 6.6. Приоритеты операций и типы данных.

РИСУНОК 6.7. операций и типы данных.

обращаться через объект Math.

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

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

значения определенного выражения.

Обратите внимание на показанное на рис. 6.7 резуль Строковые операции включают в себя операцию тирующее окно. Два первых примера работают, как и конкатенации и все операции сравнения. Операция следовало ожидать. Третий пример показывает, что мо конкатенации используется для связывания двух строк жет получиться, когда JavaScript по-своему учтет при с целью формирования новой строки. Операции оритеты. Первый знак + преобразует число 2 в строку сравнения могут использоваться со строками для срав и добавляет ее в конец "Длина в метрах: В результа нения их ASCII-значений. Начиная с крайнего левого те получается строка "Длина в метрах: 2". Потом то же символа строки, каждая пара символов сравнивается самое происходит с числом 3 и получается "Длина в друг с другом. true или false.

метрах: 23". Однако, если вместо этого требуется ото Булевы операции используются в логических выра бразить сумму 2 и 3, следует использовать круглые скоб жениях. Операция И возвращает true, если оба ее опе ки, тем самым увеличив 2 + 3. В этом слу ранда — true, а иначе — false. Операция ИЛИ возвра чае оба операнда — числа, и JavaScript выполнит щает true, если по крайней мере один из ее операндов сложение раньше конкатенации (см. рис. 6.7).

равен true. Иначе она возвращает false. Операция НЕ возвращает true, если ее операнд false, и false, если опе Резюме ранд — true.

присваивания устанавливают значения пере Операция typeof появилась в JavaScript и пред менных. Наряду с простой, JavaScript поддерживает ставляет собой встроенную операцию, Операции Глава которая представляет тип данных операнда. Это Поразрядная операция дополнения используется для особенно полезно при выяснении, была ли переменная изменения значения каждого разряда целого числа на определена. противоположное. Поразрядные логические операции Две операции работают с объявлением и использо- применяются для сравнения двух целых чисел. Двоич ванием функций JavaScript. Операция вызова функции ная форма операнда используется для работы с каждой (круглые скобки) всегда следует за именем функции и парой разрядов в числах. Логическая операция выпол заключает в себе список аргументов, которые может няется над каждой парой разрядов и возвращается це принять функция. Операция "запятая" используется для лое число. Поразрядные операции сдвига сдвигают раз отделения аргументов друг от друга. ряды целого числа вправо или влево на позиций. При Для работы с массивами и другими объектами необ- сдвиге вправо JavaScript позволяет выполнить арифме ходимы две операции. "Точкой" обычно обознача- тический или логический сдвиг.

ют доступ к элементу объекта. Это — стандартная Когда все операции в выражении имеют равные при точечная нотация. Операция индексирования исполь- оритеты, JavaScript вычисляет выражение справа нале зуется для индексации элементов массива. Она содер- во. Если же приоритет операций разный, то сначала жит имя массива и целое число, обозначающее распо- выполняется операция с самым высоким приоритетом, ложение элемента, к которому обращаются. затем следующая по приоритету и т.д. В JavaScript каж JavaScript дает доступ к двоичному представлению дая операция обладает совершенно определенным при любого целого числа с помощью поразрядных операций. оритетом.

структуры и циклов В ГЛАВЕ Условные операторы Операторы организации циклов Метки Оператор with Оператор switch Проектирование сценариев, предполагающих приня- цикла. Прибегнув к помощи циклов, можно достигнуть тие решений во время выполнения, — наиболее интерес- ситуации, когда всего лишь несколько строк программы ная часть JavaScript. В сценарии, где требуется прини- обеспечивают выполнение большого количества одно мать решения на основе его текущего состояния, просто типных операций. Это поможет сократить размер сце обеспечивают вывод вопроса и затем, в зависимости от нариев и избежать многократного набора одних и тех же выбирают путь. команд. Помимо прочего, в главе демонстрируются спо Рассмотрим для примера планирование утра моего собы повышения эффективности сценариев.

рабочего дня. Мне доступны различных ва риантов, из которых на основе определенных факторов Условные операторы я выбираю один. Я редко готовлю еду, посему наиболее важный вопрос, который я задаю себе каждое утро, — не В главе 6 рассматривалась операция ?:. Эта операция голоден ли я. Если да, я выбираю маршрут, проходящий используется для создания процесса. Сна через продуктовый магазин. К моменту завершения упа- чала выражение оценивается на предмет true ковки собственного завтрака я, как правило, уже немно- или false. в зависимости от результата, возвраща го опаздываю. Дабы восполнить потерянное время, я ется одно из двух значений. Если выражение true, воз двигаюсь по направлению к скоростному шоссе, могу вращается первое значение, а если — false — второе.

увеличить скорость. С другой стороны, если я не голо- Встречаются сценарии, принимающие решение в за ден (что случается весьма редко), то миную продукто- висимости от значения выражения, опе вый магазин и еду на работу со скоростью на 10 миль в раторы if и else. Однако результат будет другим. Вместо час медленнее. возвращения зависящего от результата значения, про Используя подобного рода планирование, можно со- грамма выбирает один из двух путей выполнения. Так, здавать и программы на JavaScript, выполняющие раз- можно заставить JavaScript выполнять множество раз личные операции в зависимости от текущего состояния. личных функций, зависящих от любой доступной ин Например, в главе 6 рассматривалось, как проверить, яв- формации.

ляется ли переменная равной какому-то значению или if даже ряду значений. С использованием управляющих структур появляется возможность заставить программу Оператор if относится к числу наиболее популярных.

выбирать различные пути в зависимости от результата Каждый язык программирования содержит его в той или упомянутой проверки. Итак, имеем первую тему, кото- иной форме, и его использования избежать, как прави рой данная глава. ло, не удается. Оператор if применяется следующим об Поскольку размеры программ неуклонно возрастают, разом:

неплохо было бы учесть немаловажный фактор — сколь if { ко времени потребуется клиенту для их загрузки. Луч [ оператора] ший способ сэкономить на количестве исходного текста в сценарии предусматривает применение Управляющие структуры и организация циклов Глава В качестве условия может указываться любое логи- раторов if (т.е. при использовании одного оператора if ческое выражение. Если результат условия равен true, внутри другого).

выполняются операторы, посему работа программы про Если условие возвращает false, операторы иг норируются и работа продолжается.

В листинге 7.1 приводится сценарий, который от дел маркетинга мог бы предложить разместить на Web меня зовут Виктор Сейчас доступна и вначале позвольте познакомить вас с новой сайте компании. Сценарий начинается с установки Наша продукция все ваши в одно из двух значений. В данном примере выбирается "Technical Support" (то бишь, техническая поддержка) и комментируются альтернативные варианты.

Сценарий доходит до первого оператора if, который проверяет, равно ли значение строке "New Products" новый продукт). Последнее вычисленное значение этого выражения — false, поэтому блок опера торов после if игнорируется. Затем сценарий доходит до второго оператора if и сравнивает значение visitorlnterest РИСУНОК 7.1. Виктор делает шаг навстречу со строкой "Technical Support". Выражение возвращает посетителю.

true, что приводит к выполнению кода, заключенного в фигурные скобки.

Листинг 7.2 демонстрирует использование логичес Независимо от того, чему равно значение visitorlnterest, ких переменных для выбора пути, по которому пойдет последний оператор всегда выполняется, поэтому про сценарий. Первый оператор if оценивает переменную давец Виктор Франкенштейн делает шаг к посетите В данном случае имела значение лю. Результирующий вывод показан на рис. 7.1. Если true, так что JavaScript выбирает первый блок if и про visitorlnterest присвоить какое-то другое значение, ре должает работу в нем, т.е. выводит на экран "Наши зультат изменится.

продукты использует весь Далее очередь дохо Обычно набор операторов заключается в фигурные дит до второго (вложенного) блока if, и оценивается скобки. Это придает сценарию логический вид и ока зывается особенно полезным в случае вложенных опе 7.1. Использование оператора if для принятия решения.

решений при помощи оператора if Опять-таки, возвращенное значение — true, поэто му операторы внутри второго блока будут выполнять ся. После завершения вложенного блока if JavaScript вы- Иногда одной конструкции if оказывается недостаточ полняет все оставшиеся инструкции первого блока. но. Зачастую требуется также зарезервировать набор Обратите внимание, как фигурные скобки помогают от- операторов, которые будут выполняться в случае, ког личать отдельные блоки программы друг от друга. да условное выражение возвращает false. Это можно сде Из рис. 7.2 видно, что строки программы выполнялись лать, добавив еще один блок непосредственно после в порядке их написания. Изменяя значения needslnfo и блока if:

needsMorelnfo, можно получить три различных резуль { тата. Помните, что если needslnfo присвоить значение операторы else { false, программа не сможет перейти ко второму блоку if.

В этом случае значение needsMorelnfo роли не играет, I поскольку оцениваться оно не будет. Извините, Виктор, Кроме имеется возможность скомбинировать но если посетителю вообще не нужна информация, ему часть else с другим оператором if. Использование тако уж точно не нужна дополнительная информация.

го метода позволяет оценить несколько разных возмож ных сценариев перед выполнением нужной операции.

Изящество данного метода состоит в том, что в конце можно определить тот же сегментом else. Формат упо Я на Наши продукты GO всем мянутого типа оператора выглядит так:

Я просто не могу могли Самый способ наши - онлайновым if (условие) ( оператора } else if (условие) { операторы ) else { Что может быть хуже придирчивого компьютера?

Листинг 7.3 демонстрирует, как можно создать интер РИСУНОК 7.2. Один трех возможных результатов.

Управляющие структуры и организация циклов Глава активную Web-страницу с помощью всего лишь не try..catch скольких строк кода. Здесь жестко задано значение клю ча которое определяет ход сценария. Оператор используется для замены заданного Для настоящего сценария с пользо- по умолчанию способа обработки ошибок. Эта тема в вателями потребуется обеспечить возможность пользо- главе подробно не рассматривается.

вательского ввода. В таком случае purchaseAmount мо жет любые значения, в зависимости от Операторы организации циклов желания заказчика. Это делается с помощью JavaScript и стандартных входных HTML-объектов, таких как пе- Организация цикла внутри сценария преследует широ реключатели и текстовые объекты. В главе 17 эта про- кий спектр целей. Рассмотрим одно простое, но весьма блема обсуждается более подробно. распространенное применение цикла. Например, напи В рассматриваемом примере клиент не соизволил по- сание программы, отображающей числа от 0 до 9, — на тратить достаточную сумму, дабы удовлетворить Викто- первый взгляд, быстрая и простая задача. Просто запи ра Франкенштейна. Условный оператор получает значе- сываются команд для отображения каждого числа:

ние false, и программа переходит на блок else. Посмотрев на рис. 7.3, можно воочию убедиться, как настойчивый продавец "разогревает" потенциального клиента.

Листинг 7.3. Блок else, соответствующий значению Это легко сделать для чисел от 0 до 9, но что если false. _ потребуется сосчитать до 1000? Можно последовать тому же способу, но тогда программа потребует гораздо боль решений при помощи оператора if ше времени на написание и загрузку в браузер. Наилуч ший способ счета до 1000 или любого другого числа зак лючается в использовании той же самой команды отображения, но с переменной вместо литерала. В дан Подобно операторам if, циклы for также могут быть вложенными. Листинг 7.5 содержит код прохода по каж дой координате сетки 10x10. Для каждой итерации пер вого цикла имеют место 10 итераций вложенного цик '. !,. ' ла. В результате вложенный цикл будет выполняться i раз.

;

. •... •.1 I от О до Листинг 7.5. Пример вложенного цикла.

0.1.2.3.1.5.6,7.8,9.

13 50.51.52.53.54.55.56.57.58.59, 60.61.62.63,64 65 66.67,68. 70.71.72.73.74.75.76.77.78.79.

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

них выполняется цикл. Синтаксис выглядит так:

Затем JavaScript доходит до вложенного цикла и присва ивает переменной у также значение 0. Вложенный цикл in { операторы отображает значения х и у и затем увеличивает у на 1.

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

ства. В листинге 7.6 такая функциональность применя JavaScript знает, что вложенный цикл необходимо ется для отображения имен и значений всех свойств начать с самого начала, в связи с чем выражение ини объекта Document (см. рис. 7.6).

циализации вычисляться повторно. Таким обра зом, у присваивается значение 0 и операторы выполня ются еще 10 раз. Процесс продолжается до тех пор, пока х не станет равным 10 и выполнение внешнего цикла, завершается. В результате отображается 100 на location боров координат (см. forms [object links - [object [object applets [object = [object т •• images title Использование (or свойств объекта document URL referrer Friday. October 17:50 cookie = domain bgColor = IgColor =..................,.

РИСУНОК 7.6. Список свойств объекта Document вместе с их значениями.

После х После цикла у Цикл работает только в версии JavaScript 1.1 и выше. Не следует забывать, что этот цикл не отлича... a ется корректной работой в Microsoft Internet Explorer РИСУНОК 7.5. 100 пар координат, сгенерированных в двух 3.0 (JScript 1.0).

циклах.

Листинг 7.6. Использование цикла Поскольку каких-либо ограничений на количество вложенных циклов нет, следовательно, число координат можно увеличить до трех или, скажем, до четырех. Дан 2 тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с по крайней мере один проход цикла.

break и continue Используя циклы, стоит обратить внимание на то, что Начиная с JavaScript 1.2, предлагается конструкция по умолчанию цикл не прекращается, а будет выполнять Она работает подобно оператору while за ис- ся до тех пор, пока определенное условие не будет рав ключением того, что условное выражение не проверя- но false. Однако, иногда может потребоваться выйти из ется вплоть до завершения первой итерации. Этот спо- цикла до того, как он дойдет до закрывающей фигур структуры и циклов Глава ной Подобное достигается за счет помещения ратору break, который останавливает выполнение цик в блок операторов внутри цикла break или continue. ла. Аппроксимация квадратного корня из 175 показана Оператор break завершает выполнение цикла, в то на рис 7.8.

время как continue пропускает оставшиеся операторы текущей итерации, вычисляет значение выра V."

.:

жения цикла (если таковое существует) и начинает вы. полнение следующей итерации. Различия между этими ' ! И двумя операторами продемонстрированы в листинге 7.9, который содержит достаточно тривиальный сценарий вычисления приближенного целочисленного значения квадратного корня числа п.

7.9. Использование операторов break и continue.

I !

break и continue И не превышающее квадратный корень 175 Подобная методика применяется часто и в больших количествах. Для экономии на объеме кода все операторы, которые ссылаются на объект Document, В листинге 7.10 цикл for "помечен" пользовательс стоит поместить в блок with. Как это показано ким идентификатором Это позволяет покидать в Поступая таким образом, можно изба цикл for либо, наоборот, продолжать его вне зависимо виться от назойливого префикса document в ссылках на сти от вложенности. Та же метка loopX указывается в методы и свойства документа.

операторе break для завершения обоих циклов for. Без Обратите внимание, что title и — это свойства этой метки оператор break остановил бы только цикл, объекта Document, которые должны записываться как значения для у. На рис. 7.9 показан ре и При использовании опе зультат работы программы, когда х и у достигают, со ратора with необходимость в ссылке на возника ответственно, значений 3 и 8.

ет только один раз, тем не менее, достигается гот же са мый результат, что и при наборе ссылки в каждой строке. На рис. показан результат выполнения кода из листинга ПРЕДУПРЕЖДЕНИЕ Все пары х у (0 0) и (0.0) (0.1) (0.2) (0.3) (0.4) (0.5) (0.6) (0.7) (0.8) (0.9) Internet Explorer 3.0 оператор with не поддерживает.

(1.31 (1.4) (1.5) [2.0) (2.1) (2.2) (2.3) (2.4) (2.5) (2.8) (2,9) (3.0) (3.1) (3.2) (3.3) (3.4) (3.5) (3.6) (3.7) (3.8) цикла х равно у Е : html | Заголовок этого документа выглядит как оператора этого документа выглядит как Теперь от префикса можно избавиться раз и навсегда!

РИСУНОК 7.9. Использование оператора label для выхода из вложенного цикла for.

Операторы with Оператор with применяется во многократного повторения ссылки на объект при доступе к его свой- РИСУНОК 7.10. Отображение информации с использованием оператора with.

ствам и методам. Любые свойства или методы в блоке with, которые JavaScript не может опознать, ассоцииру Листинг 7.11. Использование оператора with в ются с объектом, указанным в этом блоке.

JavaScript.

Синтаксис with таков:

with { операторы оператора Объект определяет, какой объект необходимо ис Вторая конструкция case совпадает с текущим зна чением request, следовательно, выполнятся команды, перечисленные в ней.

В зависимости от конкретного пример мо жет в закодированном формате.

JavaScript Unleashed - Microsoft Internet Explorer • ;

, •, Оператор switch Оператор switch используется для сравнения одного зна Inc.

чения с большим количеством других. На первый взгляд упомянутая задача решается только за счет применения большого числа условных операторов, однако оператор switch тут будет гораздо уместнее. Он читается и позволяет определить заданный блок инструкций, выполняющийся в случае, когда соответствие не найде В листинге 7.12 предполагается, что переменная request может изменяться в зависимости от требований РИСУНОК 7.11. Использование оператора switch.

пользователя. В данном примере request присваивается значение "Name". Оператор break используется для прерывания даль нейшего выполнения кода, оставшегося в switch. Если бы оператор break не использовался, оставшийся код выпол switch до версии JavaScript не существовал.

нялся бы для каждого случая, независимо от соответ ствия между request и case. Из рис. ясно, что request Листинг 7.12. Оператор switch. соответствует значению "Name", при этом на экран выводится название компании.

JavaScript Резюме </head> Для принятия решений в JavaScript используются услов ные операторы if и if обеспечивает выполнение ча — сти программы на основе вычисления определенного ус / переменных ловия. Если условное выражение возвращает true, var request = соответствующая часть программы выполняется, в про тивном случае — нет.</p><p> case "Logo" :</p><p> Помещайте оператор else сразу после блока if, что бы обеспечить выполнение следующего кода, когда вы ражение в блоке if возвращает false. JavaScript допуска ет вложенные операторы if и Такой метод дает case "Name" :</p><p> возможность задавать новые вопросы, основываясь на ответах на предыдущие вопросы.</p><p> Циклы for применяются для многократного повторе case "Products" :</p><p> ния одного раздела сценария. При объявлении цикла имеется возможность выбора начального значения пере менной, которая будет применяться внутри цикла. Мож :</p><p> но также выбирать вариант изменения переменной, каж break;</p><p> дый раз когда цикл завершается. Используя выражение ) условия цикла for, можно определять, когда остановить выполнение цикла.</p><p> Базовое подмножество языка JavaScript Часть II Используйте цикл если требуется выполнить Оператор with используется вместе с объектами набор операторов для каждого свойства объекта. JavaScript JavaScript. Он позволяет сослаться на объект только автоматически присваивает имя свойства выбранной один раз вместо многократных ссылок при обращени переменной. С помощью такой переменной можно оп- ях к свойствам и методам. Внутри блока with можно ука ределять операции над этим свойством. зывать имена свойств и методов объекта безо всякой Используйте цикл для многократного повторе- ссылки на объект.</p><p> ния раздела сценария. Потребуется лишь задать услов- И наконец, упомянем оператор switch. Этот опера ное выражение, которое должно возвращать true перед тор позволяет все возможные значения дан выполнением каждого цикла. ной переменной для исполнения всех необходимых задач.</p><p> Операторы break и continue используются для преры- Если текущее значение не равно одному из определен вания любого break полностью завершает цикл, ных заранее, программа переходит к разделу default.</p><p> a continue останавливает текущую итерацию цикла, при этом программа переходит на начало следующей итера ции.</p><p> Функции В ЭТОЙ ГЛАВЕ Понятие функций Использование аргументов Дополнительные сведения о функциях Организация одной или множества функций отно- Поэтому имеет смысл разбить сценарий на логичес сится к одной из целей всех программ на JavaScript. В кие разделы, каждый из которых предназначен для од самом простом случае сценарий может читать или при- ной конкретной цели. Когда подходит время, определен нимать данные, выполнять определенные операции на ный раздел сценария начинает выполняться. JavaScript наборе данных либо отображать и отсылать данные. Как обеспечивает такую возможность, предоставляя струк упоминалось ранее, для достижения требуемых целей туру, известную как функция.</p><p> можно использовать комбинацию базовых инструмен тальных средств JavaScript или просто одно из них.</p><p> Понятие функций Для связи с каким-то браузером сначала необходи мо запросить его возможности и затем направить его по JavaScript-функция — это просто сценарий, отделенный нужному пути. Для того чтобы у посетителя появилось от остальной части программы и имеющий свое имя.</p><p> желание неоднократно возвращаться на ваш Web-сайт, Используя это имя, другой сценарий может вызывать его лучше всего предоставить ему возможность получать ин- в любой момент и сколь угодно раз. Некоторые языки формацию о всем новом и интересном, появившемся на программирования, например, C/C++ или Java, также сайте. Если вы, например, продаете какие-либо товары, используют функции, тогда как другие языки имеют те при помощи JavaScript несложно подсчитать стоимость же самые семантические единицы, но называют их ме любой их комбинации для клиента и сохранить полу- тодами, процедурами или подпрограммами. Все они ченные данные для отдела маркетинга. делают в основном те же самые вещи, но имеют неко Выполнение подобного типа задач требует исполь- торые различия.</p><p> зования большого количества строк JavaScript. Некото- Функции служат одной цели — разделению задач, рые разделы сценария должны выполняться непосред- предназначенных для выполнения в одной программе.</p><p> ственно после загрузки Web-страницы в браузер. Другие Можно считать функцию уведомлением JavaScript о не части сценария, возможно, окажутся полезными, если обходимости выполнения конкретного списка связан проявят себя после того, как клиент введет определен- ных команд и выдачи сигнала, как только это будет ные данные в HTML-форму. Иногда бывает необходи- сделано.</p> <div class="po5"></div> <div class='stranici1'><b class='temiser'>Pages:</b>     |<a class="kn1" href="/1/40984-1-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 1 </a>|<div class='kr'><a class="kn1" href="/1/40984-2-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 2 </a></div>|<a class="kn1" href="/1/40984-3-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 3 </a>|<a class="kn1" href="/1/40984-4-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 4 </a>|   ...   |<a class="kn1" href="/1/40984-10-tm-richard-vagner-vayk-ischerpivayuschee-rukovodstvo-osnovnom-yazike-scenariev-svoevremennie-dlya-sozdaniya.php" title=""> 10 </a>|</div> <div class="separator2"></div> <div class="po122"> <img class="doc" src="/images/doc.gif" border="0" alt="" ><a class="menusil" href="/1/" title=""><b class="jir">Книги, научные публикации</b></a> </div> <div class="niz2"> <br><br> <noindex> <center> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- dislib-kvadrat (niz) --> <ins class="adsbygoogle" style="display:inline-block;width:336px;height:280px" data-ad-client="ca-pub-9894471784993021" data-ad-slot="3110193131"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center> </noindex> <br> <div class="naverh"><A href="#verh" >наверх</a><img src="/images/s.gif" hspace="3" width="5" height="11" border="0" alt="" align="top" vspace="3" ></div> </td></tr></table> <table width="100%" cellspacing="0" cellpadding="0" border=0> <tr> <td bgcolor="#CCCCFF" height="1"> </td> </tr> <tr> <td class="menu-niz"> <center> <table cellspacing="0" cellpadding="0" border=0> <tr> <td class="menu-niz1"> |  • <a href="/" title="На главную">Главная</a>  |  • <a href="/admin/contact-kontakti-dissertatsii.php" title="Контакты">Контакты</a> |  </td> </tr> </table> </center> </td> </tr> <tr><td class="line1"></td> </tr> </table></td><td class="line"><img class="lin" src="/images/spaser1.gif" border="0" alt=""></td></tr></table> </td><td valign="top"> <table width="5" border="0" cellspacing="0" cellpadding="0"> <tr> <td></td></tr></table></td></tr></table> </td><td class="site2"></td></tr><tr><td colspan="3"> <noindex> <script type='text/javascript' src='http://recreativ.ru/rcode.97536708c5.js'></script> <script type='text/javascript' src='http://recreativ.ru/rcode.88aa634d1b.js'></script> <script type='text/javascript' src='http://recreativ.ru/rcode.30746632cd.js'></script> </noindex> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top" class="cap1"> <font color="#808080">© 2011 www.dissers.ru - «Бесплатная электронная библиотека»<br><br> <noindex> Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам. <br> Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, <a href="/admin/contacts.php" title="">напишите нам</a>, мы в течении 1-2 рабочих дней удалим его. </noindex> </font> </div> </td> </tr> </table> <noindex> <!-- Yandex.Metrika counter --> <script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script> <script type="text/javascript"> try { var yaCounter78166 = new Ya.Metrika({id:78166,type:1}); } catch(e) { } </script> <noscript><div><img src="//mc.yandex.ru/watch/78166?cnt-class=1" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> </noindex></td></tr></table> </body> </html>