Язык программирования JavaScript является объектно-ориентированным языком сценариев, изначально разработанный Netscape Communications под названием LiveScript, но затем переименован в «JavaScript» и с учетом синтаксиса ближе этот язык ближе Java компании Sun Microsystems. JavaScript был позже стандартизированы ECMA под названием ECMAScript. Microsoft называет свои версии JScript.
Изменение названия LiveScript на JavaScript произошло примерно в то же время , когда компания Netscape включили поддержку технологии Java в браузере Netscape Navigator. Это изменение внесло много путаницы у умы обучающихся программированию для начинающих. Не существует никакой реальной связи между Java и JavaScript, их сходство начинается и заканчивается схожим синтаксисом и тем фактом, что оба языка широко используются в сети Интернет.
JavaScript является объектно-ориентированным языком сценариев, который взаимодействует через интерфейс называемый Document Object Model (DOM) с содержимым, может быть выполнен на стороне сервера (веб-серверов) и на стороне клиента в веб-браузере пользователя при просмотре веб-страниц. Многие веб-сайты используют JavaScript технологии на стороне клиента для создания мощных динамических веб-приложений в программировании для чайников. Он может использовать Unicode и может использоватьмощь и силу регулярных выражений (это было введено в версии 1.2 в Netscape Navigator 4 и Internet Explorer 4). JavaScript выражения, содержащиеся в виде строке можно выполнить с помощью функции EVAL.
Одной из основных задач для JavaScript являются маленькие функции, внедренные в страницы HTML и позволяющие взаимодействовать с DOM из браузера для выполнения определенных задач, которые не представляется возможныом в статический HTML: такие открытие нового окна, проверка вводимых в форму значений, изменение изображения при наведении курсора мыши и т.д. К сожалению, создание таких функций является достаточно утомительным занятием, потому как браузеры не стандартизированы, различные браузеры могут создавать различные объекты или методы сценариев, и поэтому часто приходится писать различные варианты функции JavaScript для различных браузеров, но это не очень удобно при обучении основам программирования.
JavaScript / ECMAScript поддерживается такими движками как:
- KJS
- Rhino
- SpiderMonkey
Окружающая среда
<-! … -> Комментарий разметки требуется для того, чтобы гарантировать, что код не отобразится в виде текста, в браузерах, которые не признают тега <script>. <script> теги в XHTM / XML-документах, однако, не будут работать, если закомментированы. Современные браузеры, которые поддерживают XHTML и XML, достаточнохорошо разработаны, чтобы признать <script>, так что в этих документах код остается без комментариев.
HTML-элемент может генерировать внутренние события, к которым можно подключить скрипт обработчик. Чтобы создать верный документ HTML 4.01, нужно вставить соответствующее заявление по умолчанию вязык сценариев в разделе заголовка документа.
Элементы языка
Переменные
Переменнык, как правило, динамически типизированы. Переменные определяются либо просто присваиванием им значения или с помощью оператора «var». Переменные, объявленные вне функции находятся в «глобальной» области видимости, видимы на всей веб-странице, переменные, объявленные внутри функции являются локальными для этой функции. Чтобы передать переменные с одной страницы на другую, разработчик может установить «cookie» или использовать скрытый фрейм или окно в фоновом режиме для их хранения.
Структуры данных
Главным типом является структура данных в виде ассоциативного массива похожая на хэши на языке программирования Perl или словари Python, Postscript и Smalltalk.
Элементы могут быть доступны по номерам или ассоциативным названиям (если они были определены). Таким образом, следующие выражения могут все быть эквивалентны:
myArray[1],
myArray.north,
myArray[«north»].
Объявление массивов
myArray = new Array(365);
Массивы реализованы так, что только определенные (имеющие не пустое значение) элементы будут использовать память, они «разряжают массивы». Если мы зададим множество myАггау [10] = «чего-то там» и myArray [57] = «что-то там еще ‘, то мы использовали место только для этих двух элементов.
Объекты
JavaScript имеет несколько видов встроенных объектов, а именно Object, Array, String, Number, Boolean, Function, Date and Math. Другие объекты принадлежат объектам DOM (окна, формы, ссылки и т.д.).
Определив функции конструктора можно определить объекты. JavaScript является объектно-ориентированный язык основанным на прототипах. Можно добавить дополнительные свойства и методы к отдельным объектам после того как они были созданы. Для этого для всех экземпляров определенного одного типа объекта можно использовать прототип-заявление.
Пример: Создание объекта
// Функция-конструктор
function MyObject(attributeA, attributeB) { this.attributeA = attributeA this.attributeB = attributeB }
// Создать объект
obj = new MyObject(‘red’, 1000)
/ / Доступ к атрибуту объекта
alert(obj.attributeA)
/ / Доступ атрибут с ассоциативный обозначения массива
alert(obj[«attributeA»])
Иерархия объектов может быть воспроизведена и в JavaScript. Например:
function Base() { this.Override = _Override; this.BaseFunction = _BaseFunction; function _Override() { alert("Base::Override()"); } function _BaseFunction() { alert("Base::BaseFunction()"); } } function Derive() { this.Override = _Override; function _Override() { alert("Derive::Override()"); } } Derive.prototype = new Base(); d = new Derive(); d.Override(); d.BaseFunction();
В результате получим на экране:
Derive::Override() Base::BaseFunction()
Управляющие инструкции
If ... else if (condition) { statements } [else { statements }]
Циклы
while (condition) { statements } Do ... while do { statements } while (condition); For loop for ([initial-expression]; [condition]; [increment-expression]) { statements }
Цикл For … in
Этот цикл проходит по всем свойствам объекта (или элемента в массиве)
for (variable in object) { statement }
Оператор выбора
switch (expression) { case label1 : statements; break; case label2 : statements; break; default : statements; }
Функции
Заключается тело функции в {тело может быть пустым}, а список аругментов указывается внутри () идущих после имени функции. Функции могут возвращать значение, после выполнения.
function(arg1, arg2, arg3) { statements; return expression; }
В качестве примера разберем функцию, основанную на алгоритме поиска наибольшего общего делителя Евклида:
function gcd(a, b) { while (a != b) { if (a > b) { a = a - b; } else { b = b - a; } } return a; }
Количество аргументов при вызове данной функции не должны обязательно предоставлять столько аргументов, сколько указано при объявлении функции. В функции аргументы могут также быть доступны через массив аргументов.
Каждая функция — экземпляр функции, базового типа объекта. Функции могут быть созданы и назначены как и любые другие объекты:
var myFunc1 = new Function("alert('Hello')"); var myFunc2 = myFunc1; myFunc2();
результат на экране:
«Hello»
Взаимодействие с пользователем
Большинство взаимодействие с пользователем осуществляется с помощью HTML-форм, которые могут быть доступны через HTML DOM. Однако Есть также некоторые очень простые средства общения с пользователем:
Оповещение диалоговом окне
Подтвердите диалоговое окно
Строки диалогового окна
Строка состояния
Консоли
События
Текстовые элементы могут быть источником различных событий, которые могут вызвать действия, если обработчик события EMCAScript зарегистрирован. В HTML эти функции обработчика событий часто определяется как анонимные функции непосредственно в тегах HTML.
Список событий:
- onAbort
- onBlur
- onChange
- onClick
- onDblClick
- onDragDrop
- onError
- onFocus2
- onKeyDown
- onKeyPress
- onKeyUp
- onLoad
- onMouseDown
- onMouseMove
- onMouseOut
- onMouseOver
- onMouseUp
- onMove
- onReset
- onResize
- onSelect
- onSubmit
- onUnload
Обработка ошибок
Новые версии JavaScript включают try … catch обработки ошибок.
try { // объявляем блок, в котором исключения могут быть пойманы } catch (error) { // блок, который выполняется в случае появления ошибки } finally // блок, который выполняют в любом случае }