Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JavaScript_2009.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.16 Mб
Скачать

Var column,row;

stop:

a1:{for(row=1;row<=10;++row)

a2:{for(column=1;column<=5;++column)

a3:{

a4:if(row>=6)

{

document.writeln("<br>");

break stop;

}

document.write("*");

}

document.writeln("*<br>");

}

document.writeln("Это никуда не выводится");

}

document.writeln("Конец сценария");

//-->

</SCRIPT>

</BODY>

</HTML>

>

В результате программа выведет:

*****

*****

*****

*****

*****

Пример js15b

<HTML>

<HEAD>

<TITLE> My script</TITLE>

<STYLE TYPE="text/css">

BODY { background: #FD040F;}

</STYLE>

</HEAD>

<BODY>

<script>

<!--

Var column,row;

for(row=1;row<=5;++row)

{

document.writeln("<br>");

nextrow:

for(column=1;column<=10;++column)

{

if(column>row) continue nextrow;

document.write("*");

}

}

//-->

</SCRIPT>

</BODY>

</HTML

В результате программа выведет:

*

**

***

****

*****

Функции.

ПРИМЕР js16

JavaScript-функция — это самостоятельная единица сценария, отделенная от остальной части программы и имеющая свое имя. Используя это имя, другой сценарий может вызывать ее в любой момент и сколь угодно раз. При вызове функции можно передать значения, называемые аргументами (arguments). Аргументы можно использовать в качестве переменных (variables) в пределах одного блока операторов. Как только данные присвоены переменной, становится возможной обработка данных либо использование их в вычислениях.

Синтаксис:

function имяфункции (список аргументов){Тело функции}

Например,

function f(a,b,c){c= a+b;}

Прммер js15

Ключевое слово function используется для определения функции с именем имяФункции, которое служит в качестве идентификатора для набора операторов, заключенных в фигурные скобки. Имена аргументов, хранящих передаваемые в функцию значения, заключаются в круглые скобки и отделяются друг от друга запятыми. С точки зрения программирования, аргументы представляют собой переменные, которым можно присваивать литеральные значения, другие переменные или объекты, передаваемые в функцию при вызове. Даже в случае полного отсутствия аргументов все равно необходимо после имени функции указывать пару круглых скобок, тем самым обозначая идентификатор как функцию.

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

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

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

return выражение:

function sum(a,b)

{return a+b;}

………………….

Обращение к этой функции может выглядеть так:

x=5*sum(2,6);

Вызов функции имеет вид:

имяфункции (список выражений),

например,

Z = f(r+10, x, y0);

При обращении к функции вычисление значений фактических параметров производится разными броузерами в произвольном порядке (справа или слева). Это может привести к непредсказуемым результатам при вызовах вида

x=f(k+3, k=j-2);

Вызов функции может быть отдельным оператором или включаться в выражение.

При вызове функции формальным параметрам присваиваются значения фактических. Несовпадение типов формальных и фактических параметров приводит к ошибке.

Теоретически объявлять функцию можно в любом месте в пределах раздела <script>. Существует единственное ограничение — нельзя объявлять функцию в пределах другой функции или управляющей структуры. Однако, одни блоки HTML-документа загружаются раньше других, равно как и любые сценарии, встроенные в эти HTML-блоки. В этой связи рекомендуется объявлять функции HTML-документа в разделе <head>. Объявление всех функций в этом разделе гарантирует, что функции будут доступны, если какому-то сценарию потребуется вызвать их немедленно.

Передача параметров в функцию бывает двух типов - по значению и по ссылке.

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

Если в функцию передаются объекты, передача производится по ссылке. В этом случае функция меняет значение объекта.

Если нужно передать по ссылке в функцию данные простых типов, то их нужно поместить внутрь объекта.

При использовании функций нельзя:

- писать ключевое слово var в списке параметров функции;

- забывать вернуть значение функции;

- ставить знак ; после закрывающей скобки в списке параметров;

- определять локальную переменную, имя которой совпадает с параметром функции;

- передавать фактические параметры, тип которых несовместим с формальными.

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

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

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

Рассмотрим классический пример вычисления факториала числа.

Пример js16

function factorial(n)

{return ((n>1)?n*factorial(n-1):1);}

Без рекурсии программа будет выглядеть следующим образом

function factorial(n)

{ if ((n= = 0)||(n= = 1)) return 1;

else

{ result = (n*factorial(n-1));

return result;

}

}

К именам функций можно применять оператор typeof. Результатом будет строка function

JavaScript разрешает использовать процедурные переменные, т.е. некая переменная может принимать значение имени функции, а вызов функции в дальнейшем может производиться по имени этой перменной. Например:

function somefunc(t){…}

var x;

x=somefunc;

y=x(5);

При этом переменная x будет иметь тип function.

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

function greetings(s)

{……………….}

greetings(Bobby);

greetings();

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

Буквенные функции.

(Не всегда поддерживаются)

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

var MyFunction=function(x){return x*x}

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

Вывод информации на страницу клиента

Для того, чтобы вывести результаты работы скрипта на страницу клиента нужно воспользоваться методами объектов броузера. Самый простой способ - это воспользоваться методом write объекта document, который позволяет вывести строку на страницу клиента:

document . write("Привет!");

document . writeln("Привет!");

Массивы.

Массивы являются основой практически любого современного языка программирования, и JavaScript — тому не исключение. Здесь имеется возможность создавать массивы и работать с ними. Массив (array) — это контейнер, содержащий элементы данных. Каждый из элементов массива — отдельное значение, но все они существуют как часть массива. Доступ к ним возможен только через сам массив.

Для определения или доступа к какому-либо элементу к переменной массива необходимо приписать квадратные скобки и задать индексное значение.

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

var a;

a=[1,2,3,4];

var b=[1,2,3];

Пример js17a

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

Пример js17b

var a;

a=[2,,3,4,5];

Пример js17d

В последней строке , начиная со второго значения, в массиве не будет определено.

Нумерация элементов массива начинается с 0.

Таким образом, если теперь выполнить операции:

var x,y;

x=a[1];

y=a [0];

то значение х будет undefined, а y будет равно 2.

Добавление элементов осуществляется с помощью индексации в любое место массива:

a[1]=23;

Дело в том, что память под массивы распределяется динамически, так как с точки зрения броузера они являются объектами. Размер массива явно не задается; это не характерно для многих языков программирования. В JavaScript определение размера массива не обязательно. Именно это свойство позволяет расширить массив, добавляя новые элементы данных.

Пример js17c

Оператор typeof для массива возвращает значение object.

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

имя_массива[индекс_уровня1] [индекс_уровня2]

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

Пример js17d

var a,b,c,d,e,f;

a=[1,2,3];

a[1]=[4,5,6];

a[2]=["Маша","ела","кашу"];

c=a[2][1]; // c="ела"

d=a[1][1]; // d=5

e=a[0]; // e=1

f=a[3]; // f=undefined

Ассоциативные масивы

Это массивы со строковыми индексами:

<script> var mas=[]; mas['Sas1']=1; mas['Sas2']=2; mas['Sas3']=3; mas['Sas4']=4; for(name in mas) {alert('Name: '+name+' is number '+mas[name]);} </script>

Объекты

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

Объекты JavaScript подразделяются на

- встроенные;

- пользовательские (созданные программистом);

- внешние, предоставляемые другими программами, в частности, DOM, так как броузер является внешней программой по отношению к JavaScript.

Это сложный тип данных. Для объекта определяются свойства и методы, а также набор событий, связанных с ним. События являются свойствами специального вида. Типы объектов описываются классами. Сам объект является экземпляром класса. В отличие от данных простых типов перед использованием объект нужно создать (инициализтровать) - отвести под него место в памяти. Это делается с помощью оператора new и конструктора того класса, к которому принадлежит объект. После использования объект нужно удалить из памяти оператором delete.

var obj;

obj=new someobject( ); // someobject - это тип объекта obj и его же конструктор

…………………………

delete obj;

Для доступа к свойствам и методам объекта используется точечная нотация:

Объект . свойство

Объект . метод(параметры)

Свойства объектов сами могут быть объектными, в этом случае они представляют собой ссылки на внутренние объекты.

Объекты могут быть параметрами функции. Из объектов можно формировать массивы.

При инициализации можно передавать параметры свойствам объектов через параметры конструктора:

obj=new someobject("Текст", 10 );

Можно создавать сколько угодно экземпляров объекта одного класса.

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

Внутри конструктора для обращения к создаваемому объекту используется оператор this:

function MyObject( arg1, arg2 ) ПРИМЕР 18

{

if (arg1) this .b =arg1; else this.b = "";

if (arg2) this .c =arg2; else this.c = 0.0;

}

Пример js22b

Пример

<html>

<head>

………………………………………………

<script>

<!- -

function MyObject(arg1,arg2)

{

if (arg1) this.b = arg1; else this.b ="Текст по умолчанию "

if (arg2) this .c =arg2; else this.c = 1;

}

function MyFunc( )

{

MyObj=new MyObject();

var stroka = "<p>" + MyObj.b + string(MyObj.c)+"</p>";

return str;

}

//- ->

</script>

</head>

<body>

……………………………………………………

<script>

<! - -

document . write(MyFunc( ));

// - - >

</script>

</body>

</html>

В этом примере функция MyObject является конструктором и создает экземпляр объекта со свойствами b и c. Функция MyFunc предназначена для выполнения нужных действий с объектом. Она инициализирует его и формирует строку

"<p>Текст по умолчанию 1</p>".

Данная строка выводится на страницу после обращения к этой функции в операторе

document . write(MyFunc( ));

Если при инициализации объекта MyObj через конструктор передать значения параметров, например,

MyObj=new MyObject("Мой текст ",2);

то получилась бы строка

"<p>Мой текст 2</p>".

Инициализатор.

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

MyObj = new MyNewObject(property1: parametr1, property2: parametr2,…);

Например, ПРИМЕР 23

MyObj = new MyObject(b:"Текст по умолчантю", c:1);

Встроенные классы объектов JavaScript

В JavaScript математические вычисления, сложная обработка строк и дат, а также создание массивов производятся с помощью соответствующих встроенных объектов. Для разработчиков веб-сайтов особенно важны объекты String (обработка строк), Array (массивы), Math (математические формулы и константы) и Date (работа с датами).

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

Объект Array.

ПРИМЕР 23

Используя массив ка объект, ма должны обратиться к конструктору с помощью оператора new:

имя_массива = new Array(длина_массива)

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

var myArr;

myArr=new Array(10);

Это эквивалентно записи

var myArr=new Array(10);

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

var myArr=new Array(11,12,13,14,15);

Пример Js22b.

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

Элементы массива нумеруются с нуля. Для доступа к конкретному элементу массива используются квадратные скобки.

Пример Js22c.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]