- •12. Сценарии Javascript
- •Характеристики языка Javascript
- •Вставка сценария в html-документ
- •Переменные и типы данных
- •Операторы и управляющие структуры
- •Арифметические операторы
- •Логические операторы
- •Управляющие структуры
- •Встроенные объекты Javascript
- •Создание пользовательских объектов
- •Внешние объекты
- •Пример: карточная игра Blackjack
- •Правила игры
- •Разработка объектной модели
- •Вопросы
Встроенные объекты Javascript
Javascript поддерживает ряд собственных объектов, среди которых обратим внимание на следующие:
Объект Object содержится во всех остальных объектах и обеспечивает их общую функциональность. Уже упомянутые числа, строки и массивы являются объектами Number, String и Array, соответственно, и каждый из этих объектов имеет свой набор свойств и методов. Объект Math открывает доступ к алгебраическим и тригонометрическим функциям. Объект Date предназначен для операций с датой и временем; при работе в браузере доступны лишь функции чтения данных, такие как getDate, getDay, но не setDate или setTime. Объект Global создается при запуске движка Javascript, его свойства, такие как Infinity (бесконечность), NaN (ошибка Not a Number) и undefined (неопределенная переменная), и методы доступны автоматически.
var a = '3'; //строка
var b = 4; //число
var c = a + b; //34 – строковое слияние
var d = parseFloat(a) + b; //7
//функция parseFloat – читать как число с плавающей запятой –
//гарантирует, что строка, содержащая число, будет интерпретирована
//как число
var str = 'var x = 2 + 3;';
eval(str);
document.write(x); //5
//функция eval выполняет код, заданный в виде строки,
//которая может генерироваться динамически
Особое место занимает объект Function (функция). Функции в Javascript являются объектами первого класса, то есть могут присваиваться переменным, выступать аргументами других функций и быть результатом (возвращаемым) функций. В Javascript есть несколько вариантов синтаксиса создания функций.
//классический синтаксис
function a1(x, y) {
return x + y;
}
//явное создание объекта Function
var a2 = new Function('x', 'y', 'return x + y');
//обязательным является только последний аргумент – тело функции
//еще один вариант
var a3 = function(x, y) { return x + y; };
Независимо от способа задания функции ее вызов осуществляется одинаково и с одинаковым результатом.
a = a1(3, 4);
b = a2(3, 4);
c = a3(3, 4);
Функция как объект имеет собственные свойства
function ArgTest(a, b) {
var i, s = "Функция ArgTest ожидает ";
//число аргументов при объявлении функции
var expargs = ArgTest.length;
//число аргументов при вызове функции
var numargs = ArgTest.arguments.length;
if (expargs < 2)
s += expargs + " аргумент. ";
else
s += expargs + " аргумента. ";
if (numargs == 1)
s += " Получен 1 аргумент.";
else
s += "Получено " + numargs + " аргументов.";
return (s);
}
Массив arguments содержит аргументы, отправленные в функцию при вызове, даже если они не были перечислены при объявлении функции.
function sum() {
var s = 0;
for (var i = 0, n = arguments.length; i < n; i++)
s += arguments[i];
return s;
}
document.write(sum(1, 2, 3, 4)); //10
Как было сказано, функции могут быть аргументами других функций. Например, метод sort объекта Array производит сортировку массива и может принимать в качестве аргумента функцию сравнения элементов массива.
//создаем и заполняем массив 10 элементами
var arr = [];
for (var i = 0; i < 10; i++)
arr[i] = i;
//сортируем массив по убыванию
arr.sort(function(x, y) { return x < y ? 1 : -1; });
//функция сравнения принимает два аргумента и возвращает -1,
//если первый элемент должен идти впереди второго,
//и 1 в противном случае
//перетасовываем массив, т.е. сортируем в произвольном порядке
arr.sort(function() { return Math.random() < 0.5 ? 1 : -1; });
//от аргументов функции сравнения ничего не зависит,
//поэтому они могут быть опущены. 1 и -1 возвращаются
//в случайном порядке
Функции могут вызываться из функций, в том числе из самих себя (рекурсия). Классический пример рекурсии – расчет факториала.
function Factorial(N) {
return N < 2 ? 1 : N * Factorial(N - 1);
}
