Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Konspekt_Kursa_JavaScript.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Упражнения

1. Разработать функцию пересчета давления из мм рт. ст. в Па и наоборот (760 мм рт. ст. соответствует 101325 Па) со следующей спецификацией: pressure(value, code), где value — значение либо в мм рт. ст., либо в Па, а code — код пересчета (0 из мм рт. ст. в Па, 1 из Па в мм рт. ст.). При щелчке пользователем на кнопке страницы ему предлагается в диалоговых окнах функции prompt() ввести код пересчета, начальное и конечное значения пересчитываемых величин и шаг. Сценарий должен отобразить на странице таблицу пересчета.

2. Разработать функцию вычисления среднего арифметического чисел, вводимых пользователем в диалоговых окнах функции prompt(), и отобразить в диалоговом окне функции alert() сами числа и их среднее арифметическое. Вызов сценария осуществить при щелчке на кнопке.

3. Разработать сценарий с двумя функциями, отображающими диалоговое окно alert() с сообщением, что вызвана такая-то функция, который также подсчитывает количество вызовов каждой функции. На странице предусмотреть две кнопки для вызова двух функций, а также две кнопки для отображения количества вызовов соответствующих функций.

Урок 7. Встроенные объекты (1)

Язык JavaScript является объектно-ориентированным языком. Однако его объектная модель отличается от общеизвестных моделей таких языков программирования как Java и C++ тем, что в нем используется модель прототипов, а не классов. В языке JavaScript нет механизма классов, все объекты создаются на основе прототипа. Поэтому объектная модель JavaScript проще, но в связи с этим она и не столь мощна, как модели, основанные на классах. Здесь вы не найдете ни наследования, ни полиморфизма. В этом и следующем уроках мы остановимся на создании и работе со встроенными в JavaScript объектами, а в последнем уроке, завершающим часть I нашего курса, мы научим читателя создавать собственные пользовательские объекты.

Объект Array

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

Любой объект в JavaScript создается конструктором этого объекта — специальной функцией, в которой определяются свойства и методы объекта. Для встроенных объектов конструкторы реализованы в виде функций, написанных на низкоуровневом языке процессора и встроенных в язык JavaScript. Для создания объекта необходимо выполнить операцию new с единственным операндом — конструктором этого объекта. Результатом выполнения этой операции будет выделение области оперативной памяти для хранения объекта, его инициализация и возврат ссылки на выделенную область памяти, которую можно сохранить в переменной для последующего обращения к объекту.. Все сказанное относится и к создаваемым пользователем объектам, но конструктор пишется на языке JavaScript с применением специальных правил создания свойств и методов объекта.

Массив, как и любой объект, создается с помощью операции new и своего конструктора — функции Array. Как и в других объектно-ориентированных языках, у объекта определенного типа может быть несколько конструкторов, отличающихся друг от друга только передаваемыми в него параметрами (имя всегда остается одно и то же):

a = new Array() // пустой массив (количество элементов 0)

a = new Array(число) // массив с заданным числом элементов

a = new Array(элемент0, элемент1, . . . , элементN);

Количество элементов может быть равно максимальному значению 4-х байтного числа без знака.

Для получения значения элемента массива следует в квадратных скобках рядом с именем массива указать порядковый номер элемента (выполнить операцию индексацию []):

a[0] = "1"; a[1] = 2;

c = b[2]*c[3];

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

Методы объекта Array

Методы

Действие

concat([item1

[, item2

[, . . . [,itemN]]]])

Возвращает массив, представляющий собой массив, метод которого вызывается, с добавленными в его конец элементами, заданными в качестве параметров. Если параметр сам является массивом, то добавляются все его элементы. Сам массив не изменяется.

join(separator)

Возвращает строку — результат конкатенации всех элементов массива. Соседние элементы в строке разделены указанным в качестве параметра разделителем separator.

pop()

Удаляет последний элемент из массива и возвращает его значение

push([item1

[, item2

[, . . . [,itemN]]]])

Добавляет элементы в конец массива и возвращает последний добавленный элемент. Если добавляемый элемент массив, то добавляет его как один элемент.

reverse()

Переставляет элементы массива в обратном порядке: первый элемент становится последним, а последний первым

shift()

Удаляет первый элемент массива и возвращает его значение

slice(start [, end])

Возвращает массив, содержащий часть исходного массива (сечение). Если параметр end не определен, то возвращаются все элементы от элемента с индексом start до конца массива.

splice(start,

deleteCount,

[item1[, item2[,

. . . [,itemN]]]])

Удаляет заданное вторым параметром deleteCount количество элементов из массива, начиная с элемента с индексом start. Если заданы необязательные параметры item, то добавляет их вместо удаленных. Возвращает массив удаленных элементов.

sort([имя_функции])

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

unshift([item1

[, item2

[, . . . [,itemN]]]])

Добавляет один или более элементов в начало массива и возвращает новую длину массива.

toString()

Возвращает строку — результат конкатенации всех элементов массива. Элементы массива в строке разделены запятой ,.

Несколько примеров использования методов объекта массив. Пусть определены два массива:

array1 = new Array("Первый","Второй","Третий");

array2 = new Array("Один","Два","Три");

Тогда метод join() первого массива array1.join() возвратит строку:

"Первый,Второй,Третий"

А его же метод array1.join(":") возвратит следующую строку:

"Первый:Второй:Третий"

Заметим, что метод toString() массива (наследуется от встроенного объекта Object и переопределяется в конструкторе String()) , вызываемый по умолчанию тогда, когда надо представить объект-массив в виде строки, по-существу вызывает его метод join() без параметра. Например, если необходимо отобразить в документе содержимое массива, то можно использовать следующий оператор:

document.write("<p>", array1, "</p>");

Результатом будет новый абзац со значениями массива array1, разделенными запятыми:

Первый,Второй,Третий

Метод sort() первого массива array1.sort() упорядочит элементы массива array1 (переставив их местами непосредственно в самом массиве array1) в алфавитном порядке:

array1[0] = "Второй"

array1[1] = "Первый"

array1[2] = "Третий"

Для сортировки массива в обратном порядке следует написать собственную функцию сортировки и передать ее имя (ссылку на нее) в метод sort() массива:

function revSort(a,b){

return (a > b) ? -1 : 1

}

Теперь вызов, например, array2.sort(revSort), отсортирует элементы массива array2 в противоположно-алфавитном порядке:

array2[0] = "Три"

array2[1] = "Один"

array2[2] = "Два"

Коль скоро некоторые методы массива возвращают массив, то к нему можно сразу же применить какой-либо метод, продолжив "точечную" нотацию. Например, array1.concat(array2).sort() объединит два массива в один новый и отсортирует его.

Массив, как объект, имеет свойство length, хранящее количество элементов массива. Добавление или удаление элементов массива (методы pop, push, shift, unshift, splice) приводит к автоматическому изменению свойства length.

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

Массивы JavaScript "понимают" не только целые числовые индексы, но и индексы, заданные в виде строки. Однако следует иметь в виду, что добавление в массив элементов со строковыми индексами не приводит к увеличению значения свойства length, а это означает, что подобные "элементы" не участвуют ни в каких методах массива. Забегая вперед, поясним, что созданием элемента со строковым индексом мы на самом деле создаем новое свойство нашего конкретного объекта-массива.

Для массивов нескольких размерностей конструктор не предусмотрен. Но их можно создавать, объявляя каждый элемент одномерного массива снова одномерным массивом. Полученные элементы уже двумерного массива можно снова объявить как одномерные массивы, создав, таким образом, трехмерный массив и т. д. Следующий код создает двумерный массив размерности (44):

a = new Array()

for (i=0; i < 4; i++) {

a[i] = new Array()

for (j=0; j < 4; j++) {

a[i][j] = значение

}

}

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