Function имя_функции1() //заголовок описания функции
{//секция объявления локальных переменных
. . .
//операторы тела функции
. . . }
Function имя_функции2() //заголовок описания функции
{//секция объявления локальных переменных
. . .
//операторы тела функции
. . . }
. . .
</script>
Рис. 3.12. Структура скрипта
Описание функции включает в себя заголовок с именем функции, секцию описания локальных данных, доступных только внутри функции, и операторы тела функции. Операторы описания локальных данных и тела функции на рис. 3.12 показаны многоточием. Внутри скрипта может быть описано множество функций. Функции скрипта описывают действия по обработке данных и их представлению, но для реализации действий функции должны вызываться из тегов HTML web-страницы.
3.2.2. Типы данных и их организация в JavaScript
Язык JavaScript является языком высокого уровня, для которого справедливы такие понятия как типы данных и организация данных.
Под типом данных понимается заранее зарезервированнное для использования в строго определённых целях (ключевое) слово, которое указывает длину данных, способ хранения в памяти и список возможных действий над данными. Предусмотрены следующие основные типы данных:
· численные (целочисленные Int и вещественные Flt);
· строковые;
· логические.
В языке JavaScript применена слабая типизация данных, что означает возможность вводить данные, не указывая их тип. Интерпретатор языка сам разберётся по контексту программы к какому типу отнести те или иные данные. Тем не менее, в ряде случаев лучше использовать типы и указывать тип данных посредством применения операторов преобразования типов, например parseInt() и parseFlt().
Организация данных – способ хранения данных и организации доступа к ним. Различают три основных способа организации данных: неименованные константы, переменные и массивы (рис. 3.13).
Неименованные константы – числовые, строковые и иного типа постоянные данные, которые хранятся непосредственно в тексте программы. Переменные – это данные, которые в ходе выполнения программы могут изменять свои значения и имеют символьные имена (идентификаторы) для организации доступа к ним. Они объявляются словом var. Особенностями переменных в JavaScript являются объявление их без указания типа и возможность многократного изменения типа в процессе выполнения скрипта.
var
MyVar;
//объявлена переменная
MyVar1 = 10;
//объявлена переменная и
//задано её значение //безымянной константой 10
MyVar1 = 'Это безымянная константа';
//объявлена и инициализирована
//безымянной константой
//текстовая переменная
var MyArray1 = new Array();
//создан массив без объявления //размерности и инициализации //значений
MyArray2 = new Array(1,2,3);
//создан массив из трёх числовых
//элементов со значениями 1,2,3
Рис. 3.13. Примеры описания данных
Массивы – данные, обычно одного типа, которые имеют общие имена (идентификаторы) и уникальные номера (индексы). Особенностью массивов в JavaScript являются возможность объединения в массиве данных разного типа и наличие специальной информационной структуры в виде встроенного объекта Array, предназначенной для их создания.
3.2.3. Иерархия объектов в JavaScript
Как известно, в современных языках высокого уровня введены понятия классов и объектов. Под классами понимаются особые типы данных, которые в отличие от примитивных типов объединяют в себе наборы данных (свойств) и наборы программных кодов (функций) для работы со свойствами класса. Для использования класса необходимо создать данные, имеющие тип с именем класса и называющиеся экземплярами класса или объектами. Экземпляры объектов создаются оператором new (рис. 3.13).
Язык JavaScript работает со множеством объектов, образующих иерархическую систему (рис. 3.14).
Рис. 3.14. Иерархия объектов языка JavaScript
Язык JavaScript работает с объектами, которые можно разбить на три группы: встроенные объекты, объекты модели, ориентированной на браузер (BOM), и объекты модели, ориентированной на документ (DOM). Объекты модели DOM по иерархии объектов находятся на более низком уровне, чем объекты модели BOM и являются объектами, описывающими объект Document. Встроенные объекты вполне применимы на всех уровнях иерархии объектов и позволяют выполнять действия над свойствами объектов обоих моделей. Объекты обеих моделей имеют объекты события, описанные различными способами.
3.2.4. Встроенные объекты языка JavaScript
В языке JavaScript имеются встроенные объекты:
· массивы Array;
· строки String;
· математические функции для работы с числовыми данными Math;
· дата и время Date.
Свойства и методы встроенных объектов приведены в табл. 3.3 – 3.7.
Таблица 3.3. Важнейшие методы объекта Array
Метод
Пояснение
concat
Объединение массивов
join
Объединение элементов массива в строку
pop
Удаление последнего элемента
push
Добавление одного или нескольких элементов в конец массива
shift
Удаление первого элемента
revers
Расположение элементов массива в обратном порядке
slice
Удаление нескольких элементов
splice
Добавление и удаление элементов
sort
Сортировка элементов массива по алфавиту
toSource
Возврат массива в виде литералов
toString
Возврат массива в виде строки
unshift
Добавление элементов в начало массива
valueof
Возврат значения массива
Таблица 3.4. Важнейшие методы объекта Date
Метод
Пояснение
/getDate
/setDate
Получение и установка числа месяца
/getDay
/setDay
Получение и установка дня недели
/getFullYear
/setFullYear
Получение и установка года в четырёх символьном формате
/getHours
/setHours
Получение и установка времени (часов)
/getMilliseconds
/setMilliseconds
Получение и установка времени (миллиссекунд)
/getMinutes
/setMinutes
Получение и установка времени (минут)
/getMonth
/setMonth
Получение и установка месяца
/getSeconds
/setSeconds
Получение и установка времени (секунд)
/getTime
/setTime
Получение и установка времени
/getTimezoneOffset
Получение смещения времени относительно Гринвича
/getYear
/setYear
Получение и установка года
/parse
Вычисление количества миллисекунд, прошедших с 01.01.1970
/toGMTString
Преобразование даты в строку, означающую время по Гринвичу
/toLocalString
Преобразование даты в строку, означающую местное время
/toSource
Преобразование даты в литерал
/toString
Преобразование даты в строку
UTC
Вычисление количества миллисекунд, прошедших с 01.01.1970 и преобразование в универсальное время
/valueOf
Преобразование даты в примитивное значение
Таблица 3.5. Важнейшие свойства и методы объекта Math
Свойство или Метод
Пояснение
Свойства
/Pi
Число π=3.14159298…
/E
Основание натурального логарифма (е)
/LN10
/LN2
/LN10E
/LN2E
Натуральный логарифм 10
Натуральный логарифм 2
Десятичный логарифм числа е
Логарифм по основанию 2 числа e
/SQRT1_2
/SQRT2
Квадратный корень числа ½
Квадратный корень числа 2
Вычисление наименьшего из заданных аргументов
Вычисление наибольшего из заданных аргументов
/pow
Возведение в степень
/random
Вычисление псевдослучайного числа в диапазоне 0 – 1
/round
Округление до ближайшего целого
/sqrt
Вычисление квадратного корня
Таблица 3.6. Важнейшие свойства и методы объекта String
Свойство или Метод
Пояснение
Свойства
/length
Количество символов в строке
Методы
/charAt()
/charCodeAt()
Возврат по номеру символа в строке
Возврат по номеру символа в строке его кода
.fromCharCode()
Преобразование кодов символов в строку
/IndexOf()
/lastIndexOf()
Поиск подстроки в строке
/substr()
/substring()
Копирование части строки
/toLowerCase()
/toUpperCase()
Преобразование символов строки в строчные
Преобразование символов строки в прописные
3.2.5. Объекты модели BOM и DOM web-стандартов
Web-стандарты определили два множества элементов, описывающих броузер и документ. Эти два множества называются объектными моделями броузера (BOM) и документа (DOM). В модели BOM описываются и объекты, имеющие отношение к броузеру, и объекты, относящиеся по смыслу к документу[1]. Иерархия часто использующихся объектов модели BOM показана на рис. 3.15 [2]. Важнейшие свойства и методы объектов (рис. 3.14) приведены в табл. 3.7.
Объект Window представляет собой окно броузера и содержит в себе множество вложенных объектов, составляющих это окно, в т.ч. полосы прокрутки, значки навигационной панели, рамку окна и т.д. Объекты, находящиеся на втором уровне можно рассматривать как свойства объекта Window, а объекты, находящиеся на третьем – как свойства объекта Document. Объект Window является глобальным, поэтому конструкции "window.объект_2_уровня" и "объект 2_уровня" являются эквивалентными.
Рис. 3.15. Часто использующиеся объекты модели BOM
В окне броузера существует web-страница, определяющаяся объектом Document, который имеет множество свойств (атрибутов) и методов (программных кодов). В него вложены множества объектов:
· Forms – объекты, созданные тегом <form>;
· Images – изображения, созданные тегом <img>;
· Links – ссылки, созданные тегом <a>.
Эти множества объектов называются коллекциями объектов.
Местонахождение страницы в Internet-пространстве определяется объектом Location:
· URL-адрес страницы;
· сервер, хранящий страницу, его номер порта соединения и протокол.
Однако эти сведения уместны при загрузке страницы с сервера, а не с локального компьютера.
Объект History хранит список страниц, посещённых пользователем. Этот список называется стеком истории броузера и позволяет переходить от одной страницы к другой, не выходя в поисковые службы Internet.
Объект Navigator содержит информацию о броузере пользователя и операционной системе, в которой он запущен. Этот объект позволяет получать имя броузера и его параметры, а также сведения об операционной системе, которые позволят учесть особенности броузера пользователя и отправить его к странице, которая будет корректно отображаться на экране пользователя или соответствующему разделу текущей web-страницы.
Объект Screen содержит информацию о возможностях экрана пользователя, в частности его размерах, количестве цветов и т.д.
Таблица 3.7. Важнейшие свойства и методы объектов модели BOM
Свойство или Метод
Пояснение
Объект Window
Свойства
/cloused
Возвращает true или false в зависимости от состояния окна (открыто, закрыто)
/frames
Возвращает массив всех фреймов на странице, включая iframe
/document
Возвращает объект document данного окна
/history
Возвращает объект History данного окна
/length
Возвращает количество фреймов, включая ifraim, находящихся в окне
/location
Возвращает объект Location данного окна
/name
Возвращает или устанавливает имя данного окна
/navigator
Возвращает объект Navigator данного окна
/opener
Возвращает ссылку на окно, которое открыло данное окно
/parent
Возвращает родительское окно данного окна
/screen
Возвращает объект Screen данного окна
/top
Возвращает верхнее браузерное окно для данного окна
Методы
/alert
Открытие модального диалогового окна с кнопкой ОК
/blur()
Перевод окна в неактивное состояние
/clearInterval
Прекращение повторного выполнения кода, заданного setInterval
/clearTimeout
Отменяет запланированное setTimeout выполнение кода
/close
Закрытие окна броузера
/confirm
Открытие модального диалогового окна с кнопками ОК и Отмена
/focus
Перевод окна в активное состояние
/moveBy
Переещение окна относительно его текущей позиции
/moveTo
Перемещение окна в заданную позицию
/open
Открытие нового окна броузера
/print
Печать содержимого окна
/prompt
Открытие модального диалогового окна с полем ввода данных
/setTimeout
Установка задержки выполнения операции (установка таймера)
/clearTimeout
Очистка таймера
/scrollBy
Прокручивание содержимого окна на заданное количество пикселей
/scrollBy
Прокручивание окна до указанных координат
Объект History
/length
Длина списка посещённых страниц (свойство)
/back
Перейти на страницу назад
/forward
Перейти на страницу вперёд
/go
Перейти на заданное число страниц
Объект Location
Свойства
/hash
Часть URL, содержащая якори
/hostname, /host
Часто URL, содержащая доменное имя
Имя компьютера в Интернет вместе с портом, если он указан
/href
Адрес web-страницы
/pathname
Часть URL, содержащая путь к загруженному документу
/port
Номер порта хост-устройства
/protocol
Имя протокола обмена данными
/search
Часть URL, содержащая передаваемые запросы
Методы
/assign
Загрузка документа, адрес которого передан в качестве параметра
/replace
Замена текущей страницы новой
/reload
Загрузка документа заново
Объект Screen
/availHeight
Высота экрана со всеми элементами интерфейса
/availWidth
Ширина экрана со всеми элементами интерфейса
/colorDept
Глубина пиксела (разрядность цвета) на экране пользователя
/height
Вертикальный размер экрана в пикселах
/width
Горизонтальный размер экрана в пикселах
Объект Document
/anchors
Коллекция закладок (якорей)
/cookie
Cookie, связанное с документом
/domain
До менное имя сервера
/forms
Коллекция форм
/images
Коллекция изображений
/links
Коллекция ссылок
/referrer
URL страницы, с которой был осуществлён переход на текущую страницу
/title
Заголовок документа (возврат и установка)
/URL
Текущий URL
Методы
/createElement
Создание элемента
/getElementById
Обращение к элементу по его номеру
/getElementsByName
Обращение к элементу по его имени
/getElementsByTagName
Обращение ко всем указанным тегам страницы
/write
Вывод переданного текста на страницу
/writeln
Вывод переданного текста на страницу с переводом строки
Объект Navigator
/appCodeName
Кодовое имя браузера
/appName
Имя браузера
/appVersion
Версия браузера
/cookieEnabled
Наличие поддержки cookie у пользователя
/platform
Платформа (фактически ОС), под которую скомпилирован браузер
/userAgent
Заголовок, посланный браузером пользователя при запросе ресурса (полная информация о браузере
/javaEnabled
Признак включения поддержки Java в браузере пользователя
Коллекция FormsиОбъект Form
Свойства (только чтение)
/name
Имя формы
/target
Имя окна, в которое сервер загружает результат передачи данных из формы
/action
URL сервера, на который форма посылает данные
/method
Метод передачи данных (GET для данных малого объёма, POST – для данных большого объёма
/enctype
MIME кодировка данных: "application/x-www-forum-urlencoded" (по умолчанию) или "multipart/form-data"
/length
Количество форм в коллекции
/elements
Коллекция элементов в форме
Метод
/submit
Передача формы на сервер
Коллекция LinksиОбъект Link
Свойства
/hash
Часть URL, содержащая якори
/hostname, /host
Часто URL, содержащая доменное имя
Имя компьютера в Интернет вместе с портом, если он указан
/href
Адрес web-страницы
/pathname
Часть URL, содержащая путь к загруженному документу
/port
Номер порта хост-устройства
/protocol
Имя протокола обмена данными
/search
Часть URL, содержащая передаваемые запросы
/target
Значение атрибута TARGET
/length
Количество элементов в коллекции (только для кллекции)
Источник события (Intrnet Explorer)
Источник события (Netscape)
/cancelBubble
Запрет всплытия события
/returnValue
Отмена действия события по умолчанию (Intrnet Explorer)
/screenX
/screenY
Горизонтальная и вертикальная координаты события относительно экрана
/clientX
/clientY
Горизонтальная и вертикальная координата события относительно документа (Intrnet Explorer)
/pageX
/pageY
Горизонтальная и вертикальная координаты события относительно документа (Netscape)
/offsetX
/offsetY
Горизонтальная и вертикальная координата события относительно контекста (Intrnet Explorer)
/layerX
/layerY
Горизонтальная и вертикальная координаты события относительно контекста (Netscape)
3.2.5. Объекты модели DOM web-стандартов
Web-страница состоит из стандартных элементов, доступ к которым обеспечивает модель DOM. Она Рассчитана на использование как языком JavaScript, так и языком XML. Модель основана на древовидном способе изображения структуры страницы (рис. 3.16). На рис. 3.16,а показан код простой страницы, содержащей заголовок, абзац и таблицу. Жирным шрифтом выделены открывающие теги стандартных элементов, образующих структуру таблицы. Наклонным шрифтом показано содержимое этих тегов. Тег <b>, не образующий стандартного элемента, показан нормальным шрифтом.
Рис. 3.16. Пример древовидного изображения структуры web-страницы
На рис. 3.16,б показана древовидная структура web_страницы. Прямоугольниками показаны теги стандартных элементов. Из рисунка видно, что страница имеет иерархическую структуру. На самом верху иерархии находится тег <html>, на самом нижнем – содержимое тегов стандартных элементов, вложенных в элемент html. Теги стандартных элементов образуют узлы дерева Вышестоящие узлы называются родительскими, нижестоящие – дочерними. Узел html является корневым узлом документа.
Иерархия объектов модели DOM показана на рис. 3.19. На верхнем уровне иерархии находятся объекты:
· Node – абстрактный объект, предназначенный для описания каждого узла документа;
· NodeList – список всех объектов семейства Node, обеспечивающий доступ к объектам по номеру (индексу);
· NamedNodeMap – объект, обеспечивающий доступ к объектам по имени.
В зависимости от типа узла на основе объекта Node создаётся конкретный объект, расположенный на более низком уровне иерархии. Язык XML использует все объекты. Жирным шрифтом выделены объекты, используемые в языке JavaScript. Свойства и методы объектов модели DOM приведены в табл. 3.8
Рис. 3.19. Иерархия объектов модели DOM
Таблица 3.8. Важнейшие свойства и методы объектов модели DOM
Свойство или Метод
Пояснение
Объект Node
Свойства
/firstChild
Первый дочерний узел элемента
/lastChild
Последний дочерний узел элемента
/previouseSibling
/nextSibling
Предыдущий и следующий дочерние узлы элемента того же уровня, что и текущий дочерний узел
/ownerDocument
Корневой узел документа, содержащего узел (недоступно в IE5 и IE5.5)
/parentNode
Элемент, содержащий узел
/nodeName
Название узла
/nodeType
Тип узла в виде числа
/nodeValue
Значение узла в формате обычного текста (установка)
Добавление нового объекта в конец списка дочерних узлов, возврат присоединённого узла
Удаление дочернего узла из списка дочерних узлов объекта Node и возврат удалённого узла
Замена старого дочернего узла новым и возврат заменённого узла
Вставка нового объекта Node в список дочерних узлов перед узлом, указанным в параметре referenceNode, и возврат вставленного узла
/cloneNode(cloneChild)
Возврат дубликата текущего узла, принимает булево значение (true – клонируется текущий узел и все его дочерние узлы, false – если клонируется только текущий узел)
/hasChildNodes
Признак наличия дочерних узлов
Объект document
Методы
/getElementById(idvalue)
Возврат ссылки (узла) на элемент, представляемый значением атрибута id этого элемента
/getElementByTagName(tagname)
Возврат ссылки (списка узлов) на выбор элементов, описанных в тегах с указанным именем
/documentElement
Возврат ссылки на наиболее удалённый элемента документа (корневой элемент, например, </html>)
/tagName
Возврат названия тега документа
/createElement(elementName)
Создание узла элемента с указанным именем и возврат созданного элемента
Создание и возврат узла атрибута с указанным именем
Возврат значения атрибута
Установка значения атрибута
Замена текущего значения атрибута значением по умолчанию
Объект Event
Свойства
/bubbles
Признак возможности управления от одного элемента другому
/cancelable
Признак возможности отмены у события действия по умолчанию
/currentTarget
Указание события, обрабатывающегося в текущий момент времени
/eventPhase
Сообщение фазы, в которой находится событие
/target
Указание элемента, вызвавшего событие (только для DOM-браузеров)
/timeStamp
Указание времени наступления события (только для Firefox)
Указание нажатой кнопки мыши (0 – никакая, 1 –– левая, 2– правая, 3 – левая и правая одновременно, 4 – средняя, 5 – левая и средняя одновременно, 6 – правая и средняя одновременно, 7 – все три одновременно)
/clientX
/clientY
Горизонтальная и вертикальная координата указателя мыши в момент возникновения события
/screenX
/screenY
Горизонтальная и вертикальная координаты указателя мыши относительно начала координат экрана в момент возникновения события
/relatedTarget
Текстовый узел – адресат события mouseover
3.2.6. Приёмы программирования на JavaScript
3.2.5.1. Операции и операторы языка JavaScript
В языке JavaScript определено множество операций и операторов. Операции языка приведены в табл. 3.9, операторы языка приведены в табл. 3.10, встроенные функции – в табл. 3.11 [4].
Таблица 3.9. Операции языка JavaScript
Операция
Пояснение
Пример
Операции присваивания
=
Присваивание
а=5
+=
Присваивание со сложением
a+=b то же, что a=a+b
-=
Присваивание с вычитанием
a-=b то же, что a=a-b
*=
Присваивание с умножением
a*=b то же, что a=a*b
/=
Присваивание с делением
a/=b то же, что a=a/b
%=
Присваивание с остатком от деления
a%=b то же, что a=a mod b
<<=
Присваивание со сдвигом влево
>>=
Присваивание со сдвигом вправо
&=
Присваивание с побитовым "И"
^=
Присваивание с побитовым "исключающим ИЛИ"
|=
Присваивание с побитовым "ИЛИ"
Операции логических отношений
==
Равно
!=
Не равно
===
Строго равно
!==
Строго не равно
>
Больше
<
Меньше
>=
Больше или равно
<=
Меньше или равно
Операции вычислений
+
Сложить
-
Вычесть
*
Умножить
/
Разделить
%
Найти остаток от деления
++
Увеличить на единицу
--
Уменьшить на единицу
&
Побитовое логическое "И"
|
Побитовое логическое "ИЛИ"
^
Побитовое логическое "исключающее ИЛИ"
~
Побитовое логическое "НЕ"
<<
Сдвиг влево
>>
Сдвиг вправо
&&
Логическое "И"
||
Логическое "ИЛИ"
!
Логическое "НЕ"
Таблица 3.10. Операторы языка JavaScript
Операция
Пояснение
Пример
if … else
Оператор ветвления
switch
case
default
Переключение по условию
Внутренний переключатель оператора switch
Действие по умолчанию оператора switch
for
Организатор цикла со счётчиком
return
Возвращение значения
while
Организация цикла с предусловием
do . . . while
Организация цикла с постусловием
with
Операции с одним и тем же объектом
for . . . in
Организация цикла с использованием всех свойств объекта
function
Заголовок описания функции
Таблица 3.11. Встроенные функции языка JavaScript
Функция
Пояснение
Пример
/eval
Оценка выражения без ссылки на объект
/isFinite
Проверка "Является ли объект числом?"
/isNan
Проверка "Является ли объект не числом?"
/parseFloat
Выделение из строки числа с плавающей точкой
/parseInt
Выделение из строки целого числа в любой системе счисления
/Number
Преобразование объекта в число
/String
Преобразование объекта в строку
/escape
Преобразование всех не буквенно-цифровых символов строки в их ASCII-коды с предшествующим символом %
/ubescape
Раскодирование строки
3.2.5.2. Конструирование выражений
Выражения в языке JavaScript можно разделить на арифметические, логические и символьные. Правила конструирования выражение в целом аналогичны правилам других языков программирования:
· выражения записываются в одну строку, верхние и нижние индексы запрещаются;
· выражения могут содержать символ операции присваивания, безымянные константы, имена и индексы переменных, обращения к встроенным функциям и функциям, определённым пользователем.
Конструирование символьных выражений имеет ряд особенностей, рассмотренных ниже.
Арифметические выражения в целом строятся так же как и в большинстве языков программирования. Несколько непривычным является обилие сложных операторов группы присваивания, например:
· а=5
· a+=b то же, что a=a+b
· a-=b то же, что a=a-b
· a*=b то же, что a=a*b
· a/=b то же, что a=a/b
· a%=b то же, что a=a mod b.
Особенностью построения арифметических выражений является также отсутствие привычного оператора возведения в степень. Это возможность в JavaScript реализуется с помощью встроенной функции pow.
Особенностью построения логических выражений является применение оператора "= =" вместо "=". Конструкция а=b означает присвоение переменной а значения переменной b. Конструкция а==b означает сравнение переменных на предмет их равенства.
Для преобразования типов можно использовать функции parseFloat, parseInt, Number и String. Язык JavaScript предоставляет также возможность различных проверок, например, функция isFinite организует проверку является ли переменная или выражение числом, а функция isNan или, наоборот, не числом.
При построении символьных выражений широко используются привычные операторы и функции работы со строковыми данными: конкатенация строк, поиск подстроки в строке и т.д. Особенностями работы с символьными выражениями являются:
· замена привычных имён встроенных строковых функций специфическими именами языка JavaScript;
· необходимость применения регулярных выражений, особенно в случаях поиска подстроки в строке, замены частей строк и т.д.
Регулярным выражением называется шаблон текста, состоящий из обычных символов и специальных управляющих символов. Регулярные выражения выделяются символами "/". Например, комбинация символов " /о{2}/ "означает комбинацию символов " оо ", в частности в слове food. Список управляющих символов приведен в табл. 3.16 раздела 3.2.5.6.
3.2.5.3. Организация ветвления программы
Ветвление программы осуществляется условным оператором if … else и переключателем switch – case – default.