Как и все, что связано с Web, новая технология JavaScript гораздо моложе Java. JavaScript сначала был разработан компанией Netscape, поэтому его первое имя - LiveScript. Ожидалось, что этот язык сценариев расширит возможности HTML и выступит в качестве частичной альтернативы большому числу CGI-сценариев, будет перерабатывать информацию из формы и добавлять динамику в пользовательские страницы. После выхода Java компания Netscape начала работать вместе с компанией Sun над созданием языка сценариев, чей синтаксис и семантика по плану должны были тесно связываться с Java. Отсюда возникло и название JavaScript. В результате совместных усилий Netscape и Sun и был создан этот язык.
Одна из причин, послуживших созданию JavaScript, была связана с потребностью в присутствии логики и интеллекта не только со стороны сервера, но и клиента. Без JavaScript все выполнение переходит к серверу, причем даже такие простые операции, как проверка допустимости данных. Фактически, при отсутствии логики на стороне клиента Web-среда превращается в устаревшую хост-терминальную архитектуру, вытесненную революцией ПК в 80-х годах. Внедрение логики в браузере существенно усилило клиента и превратило отношение в истинную клиент-серверную систему.
С момента своего появления (декабрь 1995 г.) язык JavaScript имел существенную поддержку в лице ведущих производителей, в числе которых Apple, Borland, Sybase, Informix, Oracle. Digital, HP и IBM. JavaScript продолжает развиваться, внедряясь не только в современные браузеры, но и в приложения, созданные различными компаниями.
Немного позже, понимая всю важность создания Web-сценариев, Microsoft решила поддержать JavaScript. Однако компания Netscape предпочла передать Microsoft лишь только лицензию на право использования технологии. На основе общедоступной документации в Microsoft был создан "перепроектированый" JavaScript - JScript, поддерживаемый Internet Explorer 3.0 и выше. JScript 1.0 плохо совместим с JavaScript 1.1, используемым Netscape Navigator 3.0 и более поздними браузерами. В конечном итоге множество версий и различных хитростей, характерных для того или иного браузера, стали причиной головной боли для разработчиков Web-сайтов, использующих JavaScript.
К счастью, огорченные разработчики сценариев смогли вздохнуть свободно. Компании Netscape, Microsoft и другие производители решили подогнать язык под стандарты ЕСМА (European Computer Manufactureres Association). В тот период ЕСМА составила спецификацию языка - ECMAScript, что поддержали все производители. Хотя стандарты ЕСМА оказывают существенную помощь, все же компании Netscape и Microsoft продолжают развивать языки JavaScript и JScript, выходя при этом за пределы стандартов.
Помимо JScript, еще одним конкурентом JavaScript является VBScript, созданный с целью упрощения Web-разработок на Visual Basic (VB). VBScript является подмножеством языка Visual Basic. Из-за отсутствия поддержки со стороны Netscape, VBScript используется для интрасетей. Он пользуется большой популярностью у пользователей Microsoft Internet Explorer.
Несмотря на появление VBScript, JavaScript стал стандартным языком сценариев для Web. JavaScript часто применяется при создании инструментов для разработки Web-страниц.
Ниже перечислены правила написания скриптов применительно к языку JavaScript, соблюдение которых гарантирует корректность работы программ.
JavaScript регистрозависимый язык. Написание переменных и функций, как определенных пользователем, так и стандартных, должно выполняться с учетом регистра определенного при объявлении.
Для разделения операторов используется разделитель ";"
При задании блока операторов используют фигурные скобки "{}"
Присвоение значений производится с помощью оператора присвоения "="
Однострочный коментарий ставится с помощью символов "//", многострочный - "/* */"
/* Пример кода написаного на JavaScript */ var myVariable; // Объявление переменной
myVariable = 0; // Присвоение значания for (count=1; count<10; count++) // Задание цикла
{
myVariable=myVariable+count;//Суммирование чисел от 1до10
}
alert(myVariable);//Вывод значения переменной myVariable в диалоговом окне
Скрипт размещают между открывающим и закрывающим элементами <script>. Таких пар открывающих и закрывающих тегов в документе может быть множество, и вних располагается код JavaScript. Чаще всего код, который содержит функции, располагают в разделе <head>, а код который должен выполняться в процессе загрузки страницы - в <body>. Для настройки раздела <script> используются следующие атрибуты:
language - устаревший атрибут, использовавшийся для указания языка скрипта. Для JavaScript присваивается значение "javascript"
type - новый атрибут, использующийся для указания языка скрипта. Для JavaScript присваивается значение "text/javascript"
src - атрибут, который указывает на внешний файл со скриптами
Есть возможность писать скрипты во внешнем файле и связать этот файл с файлом html-документа через элемент <script> и его атрибут src. Файл, который содержит скрипты JavaScript должен иметь расширение .js . Внутри файла элемент <script> не ставится, а скрипт пишется сразу сначала файла.
<html>
<head>
<title>
Использование встроеного скрипта
</title>
</head>
<body>
<script type="text/javascript">
var s = "JavaScript - это просто!";
alert(s);
</script>
</body>
</html>
Файл index.html |
Файл script.js |
<html> <head> <title> Использование скрипта размещенного во внешнем файле </title> </head> <body> <script type="text/javascript" src="./script.js"> </script> </body> </html> |
var s="JavaScript-это просто!"; alert(s); |
Эти два примера содержат код скрипта, который выводит в диалоговом окне сообщение. Различие в них состоит в том, что в первом html-документе скрипт размещен в разделе <body>, а во втором - скрипт находится во внешнем файле (предусматривается что js-файл находится в той же папке что и html-файл)
На даный момент еще есть броузеры не поддерживающие скриптов, и весь код скрипта в них выводится на экран в виде текста. Чтобы этого не происходило рекомендуется весь код скрипта размещать между коментариями HTML - "<!-- //-->". Броузеры, которые понимают скрипт, коментарии просто игнорируют.
<html>
<head>
<title>
Использование встроеного скрипта
</title>
</head>
<body>
<script type="text/javascript">
<!--
Здесь пишеться скрипт
//-->
</script>
</body>
</html>
JavaScript не является строго типизированным языком программирования - переменные не имеют четко фиксированного типа. Тип любой переменной совпадает с типом значения, присвоенного этой переменной. Тип переменной может меняться на протяжении работы скрипта (но этого желательно избегать).
Объявлять переменные в JavaScript не обязательно, хотя хороший стиль программирования предписывает объявлять все переменные, которые Вы собираетесь использовать. Для объявления переменных используется оператор var
var a; // Объявление переменной без присвоения значения
var a = 25;//Объявление переменной с присвоением ей значения (инициализация)
var a, b, c; // Объявление нескольких переменных
var a = 1, b = "JavaScript", c = 5.6; // Объявление нескольких переменных с присвоением им значений
Если переменная объявлена, но ей не присвоено значение, то по умолчанию она имеет значение - undefined. Может возникнуть ситуация, когда Вам потребуется объявить переменную и инициализировать ее, но Вы не хотите, чтобы эта переменная содержала какое-то конкретное значение. Для этого можно присвоить этой переменной значение null
var x; // Переменная х имеет значение undefined
var x = null; // Переменная х имеет значение null
Имена переменных могут быть любой длины, и должны начинаться с буквы, символа подчеркивания (_) или символа ($). Последующие символы могут бытьбуквами, цифрми, символами подчеркивания или символами ($).
Переменные могут быть локальные и глобальные. Локальные обьявляются внутри функций и видны только в пределах этой функции. Если переменная объявлена не внутри функции - то она глобальная, и доступ к ней можно получить с любого блока скрипта XHTML документа.
Данные, которые могут храниться в переменных, подразделяются на несколько типов:
Строки
Числа
Логические(булевы) данные
Объекты
Строка представляет собой последовательность символов, заключенную в одинарные(') или двойные (") кавычки. Переменной можно присвоить исходное значение '' или "", строки нулевой длины.Важно отметить, что строка является объектом (объекты будут рассматриваться в следующих уроках). Если в одной строке необходимо разместить другую (вложенную) строку, то при этом используют другой тип кавычек. Конкатенация строк (объединение) производится знаком "+".
var s = "Строка";
var s = 'Это тоже строка';
var s = ""; // Строка нулевой длины
var s = "Строка 'Вложенная строка' текста";
var s = "Строка1" + "Строка2" // Объединение строк
var s = "Строка "Вложенная строка" текста"; // Это неправильная запись - вызовет ошибку
Числа делятся на несколько подтипов:
Целые
Вещественные
Восьмиричные
Шестнадцатиричные
Для записи вещественных чисел используется знак "точка" (.) или/и используется знак e. Восьмиричные числа начинаются с цифры 0 и содержат цифры от 0 до 7. Шестнадцатиричные числа начинаются с символов: 0x или 0X и содержат знаки: 0..9,a..f.
var i = 39; //Целое десятично число 39
var i = 0.39e2; //Число 39
var i = -6787.2763; //Число -6787.2763
var i = 0372; //Восьмиричное число 372
var i = 0x55f2; //Шестнадцатиричное число 55f2
Логический тип имеет всего два значения: true(правда) и false(ложь). false соответствует числу 0, все остальные значения при использовании в выражениях эквивалентны значению true.
var flag=true;//Переменная flag имеет значение true (правда)
var flag=false;//Переменная flag имеет значение false (ложь)
Работа с объектными типами будет рассмотрена на следующих занятиях.
Ниже в таблицах перечисленны все операции, которые можно проводить над даными в JavaScript. В основном они должны быть Вам знакомы из курса C++, поэтому приводится лишь их краткая характеристика.
Таблица 1. Операции присваивания.
= |
Присваивание |
Прямое присваивание (значение правого операнда присваивается левому) |
+= |
Присваивание со сложением |
Левому операнду присваивается сумма левого и правого операндов |
-= |
Присваивание с вычитанием |
Вычитает левый операнд из правого и присваивает результат левому |
*= |
Присваивание с умножением |
Левому операнду присваивается произведние левого и правого операндов |
/= |
Присваивание с делением |
Делит левый операнд на правый и присваивает результат левому операнду |
%= |
Присваивание с остатком от деления |
Делит левый операнд на правый и присваивает остаток от деления левому операнду |
<<= |
Присваивание с побитовым сдвигом влево |
Производит побитовое смещение для левого операнда влево на количество бит, заданых правым операндом, и присваивает результат левому операнду |
>>= |
Присваивание с побитовым сдвигом вправо |
Производит побитовое смещение для левого операнда вправо на количество бит, заданых правым операндом, и присваивает результат левому операнду |
>>>= |
Присваивание с полным побитовым сдвигом вправо |
Производит побитовое смещение для левого операнда влево на количество бит, заданых правым операндом, со сдвигом нулей влево и присваивает результат левому операнду |
&= |
Присваивание с побитовым сравнением AND |
Производит операцию "побитовое И" (&), и присваивает результат левому операнду |
^= |
Присваивание с побитовым сравнением XOR |
Производит операцию "побитовое ИЛИ" (^), и присваивает результат левому операнду |
|= |
Присваивание с побитовым сравнением OR |
Производит операцию "побитовое включающее ИЛИ" (|), и присваивает результат левому операнду |
Таблица 2. Операции сравнения.
== |
Равно |
Возвращает истину (true), когда левый и правый операнды равны |
!= |
Не равно |
Возвращает истину, когда левый и правый операнды не равны |
=== |
Строго равно |
Возвращает истину, когда левый и правый операнды равны и относятся к одному типу даных |
!== |
Строго не равно |
Возвращает истину, когда левый и правый операнды не равны и(или) относятся к разным типу даных |
> |
Больше |
Возвращает истину, когда левый операнд больше правого |
< |
Меньше |
Возвращает истину, когда левый операнд меньше правого |
>= |
Больше или равно |
Возвращает истину, когда левый больше правого или равен ему |
<= |
Меньше или равно |
Возвращает истину, когда левый меньше правого или равен ему |