Введение в JavaScript
JavaScript
JavaScript является языком сценариев (скриптов), который применяют в основном для создания на Web-страницах интерактивных элементов. Его можно использовать для построения меню, проверки правильности заполнения форм, смены изображений или для чего-то еще, что можно сделать на Web-странице. Если взглянуть на Google Maps или службу GMail компании Google, то можно понять, на что способен сегодня язык JavaScript.
Так как JavaScript является в настоящее время единственным языком сценариев, который поддерживают все основные браузеры Web (Internet Explorer, Firefox, Netscape, Safari, Opera, Camino и т.д.), то он используется очень широко.
Код JavaScript обычно выполняется Web-браузером клиента, и в этом случае он называется сценарием на стороне клиента. Но код JavaScript можно выполнять также на Web-сервере для формирования документов HTML, воплощая тем самым сценарий на стороне сервера. Хотя использование JavaScript обычно ограничивается сценариями на стороне клиента, он является также очень мощным серверным языком.
При создании кода JavaScript требуется фактически только текстовый редактор и Web-браузер. Знание HTML и CSS будет играть определенно положительную роль, и если вы захотите использовать навыки JavaScript на Web-сайте, то понадобится также Web-сайт. Если у вас уже есть Web-сайт, то отлично! Если нет, то существует множество бесплатных серверов, которые можно использовать для размещения своих страниц.
Что касается текстового редактора, то в Windows имеется редактор NotePad. Хотя этого будет достаточно для редактирования JavaScript, HTML и CSS, более мощный редактор, такой, например, как EditPlus или другой, может оказаться более удобным.
Ну, а теперь можно перейти к созданию сценария JavaScript!
Прежде всего, необходимо узнать, как добавить сценарий JavaScript на страницу HTML. Это можно сделать одним из двух способов: поместить теги Script на Web-странице и расположить код JavaScript внутри этих тегов, или поместить весь код JavaScript в отдельный файл и связаться с ним с помощью тега Script.
Любой из этих методов вполне допустим, но они имеют разное назначение. Если имеется небольшой код, который будет использоваться только на одной странице, то размещение его между тегами Script будет хорошим решением. Если, однако, имеется большой фрагмент кода, который будет использоваться на нескольких страницах, то, наверно, лучше поместить этот код JavaScript в отдельный файл и соединиться с ним. Это делается для того, чтобы не нужно было загружать этот код всякий раз при посещении различных страниц. Код загружается один раз, и браузер сохраняет его для последующего использования. Это похоже на то, как используются каскадные таблицы стилей (CSS).
Ниже приведены примеры двух способов подключения кода JavaScript:
<script type="text/javascript"></script> <script type="text/javascript" src="scripts/JavaScriptFile.js"></script>В первом примере, код JavaScript помещается между символами > и <, прямо перед "</script> ". Если вы совершенно не знаете, как работает Web-страница, то вот пример того, как устроена страница HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE> Здесь располагается заголовок страницы </TITLE><META NAME="Generator" CONTENT="EditPlus"><META NAME="Author" CONTENT="Имя автора"><SCRIPT TYPE="text/javascript"></SCRIPT></HEAD> <BODY>Здесь располагается основная содержательная часть Web-страницы (тело).</BODY></HTML>Сохраните этот файл где-нибудь на своем компьютере с расширением ".html", так, чтобы полное имя файла было, например, таким: "JavaScript_Lecture_1.html". После сохранения файла сделайте на нем двойной щелчок мышью, чтобы открыть в используемом по умолчанию браузере.
Почти любой язык программирования в мире имеет дело с объектами, называемыми "переменными", и JavaScript не является исключением. Переменная является просто элементом данных с присоединенным к нему именем. Она может содержать число, слово или предложение (называемые строками - String) или объект (Object), о которых будет рассказано позже. Если коду необходимо сообщить, что имеется 5 яблок, то можно создать переменную с именем "apples" и задать ей значение 5. Давайте сейчас это сделаем. В JavaScript для определения переменной используется ключевое слово "var". Отметим, что JavaScript различает регистр символов, поэтому "var" означает не то же самое, что "VAR" или "Var".
var apples = 5;Необходимо сделать два важных замечания в отношении этого небольшого фрагмента кода. Первое: требуется помнить о том, что JavaScript является "слабо типизированным" языком. Это означает, что при определении переменных не требуется указывать, какого они типа: будут ли они числами, строками, объектами, и т.д. Во многих других языках необходимо делать это различие.
Второе: обратите внимание на точку с запятой (;) в конце строки. Это говорит интерпретатору JavaScript, что вы закончили делать то, что делали в данный момент, - в нашем случае это задание значения 5 переменной "apples". Хотя точка с запятой не является обязательной в JavaScript, лучше привыкнуть ее использовать.
Итак, мы определили в коде, что имеется 5 яблок. Что дальше? Информация о яблоках имеется в коде, но никто об этом не знает. Надо сообщить о яблоках! Одним из наиболее распространенных методов вывода простого сообщения пользователю является отправка уведомления (alert):
var apples = 5;alert('Имеется ' + apples + ' яблок!');Если протестировать этот сценарий, то на экране появится окно с сообщением " Имеется 5 яблок! " Сейчас подходящее время, чтобы ввести строки (String) и так называемую конкатенацию или соединение строк. Строка является просто небольшим фрагментом текста и может содержать любой текст. В JavaScript мы сообщаем коду, что имеется строка, заключая ее в одиночные или двойные кавычки (" или '). Можно использовать любой тип кавычек. Знаки плюс (+) в примере выше сообщают коду, что мы соединяем строку с предыдущей строкой.
Итак мы имеем строку " Имеется " за которой следует переменная apples (равная 5), за которой следует еще одна строка " яблок! ". Соединим их вместе и получим " Имеется 5 яблок! ". Команда "alert" получает то, что ей передается (то, что находится между скобок) и открывает окно с текстом.
Что если мы хотим предложить пользователю съесть яблоко? Можно, например, спросить, сколько яблок он хотел бы съесть:
var apples = 5;alert('Имеется ' + apples + ' яблок!'); var eat = prompt('Сколько яблок вы хотите съесть?', '1');"prompt" является другой встроенной функцией, аналогичной "alert". Однако вместо простого вывода информации она также получает ввод от пользователя. В данном случае мы спрашиваем у пользователя, сколько яблок он хотел бы съесть. '1' в коде сообщает функции "prompt", что значением по умолчанию для количества яблок будет 1, так как люди обычно едят только одно яблоко за раз. Однако пользователь может изменить это значение на любое другое. Когда пользователь щелкнет на кнопке " OK ", переменной "eat" будет задано значение этого ввода. Поэтому если пользователь введет 2, то eat будет равно " 2 ".
Поэтому, если пользователь съел 2 яблока, то останется 3, так? Поэтому выполним несколько простых математических операций и покажем результат.
var apples = 5;alert('Имеется ' + apples + ' яблок!'); var eat = prompt('Сколько яблок вы хотите съесть?', '1'); apples -= parseInt(eat);alert('А теперь имеется только' + apples + ' яблок!');Здесь мы видим два новых элемента. Прежде всего, обращение к функции "parseInt", которая получает строку и возвращает число. Так как для выполнения математических операций требуются числа, то это гарантирует, что мы имеем число. Если пользователь введет в поле "2", то parseInt превратит это в число 2.
Затем, оператор "-=", который означает вычитание из левой части оператора значения правой части. Поэтому значение переменной "eat" вычитается из переменной "apples". Можно также записать эту строку следующим образом:
apples = apples - parseInt(eat);Это означает в точности то же самое и может быть немного легче для понимания. Теперь, когда известно, сколько осталось яблок, мы еще раз сообщаем пользователю эту информацию.
Существуют другие операторы, подобные -=, которые делают похожие вещи. Всего имеется 8 обычных арифметических операторов:
+-/*+=-=/=*=Вот и все для начала. В следующей лекции мы добавим в код проверку, введем операторы if и else и вкратце познакомимся с функциями.
Операторы и функции
При тестировании сценария, написанного в предыдущей лекции, можно заметить, что результат, получаемый из prompt, требует некоторой проверки. Когда сценарий спрашивает, сколько яблок желает съесть пользователь, то пользователь может ввести число больше 5, меньше 0 или что-то, что вообще не является числом. В каждом из таких случаев желательно информировать пользователей, что введено недопустимое значение. Так как в этом сценарии имеется только 5 яблок, то это максимальное количество яблок, которое может получить пользователь. Поэтому начнем с проверки, что введенное число не больше 5. var apples = 5; alert('Имеется ' + apples + ' яблок!'); var eat = prompt('Сколько яблок вы хотите съесть?', '1'); var eaten = parseInt(eat); if(eaten > 5){ alert('Простите, но имеется только 5 яблок. Вы не можете съесть ' + eaten + ' яблок!'); } else { apples -= eaten; alert('А теперь имеется только ' + apples + ' яблок!'); } Основными новыми понятиями здесь являются операторы "if" и "else". Операторы if и else достаточно легко понять. Приведенный выше код дает возможность сказать: "Если пользователь выбрал для еды более 5 яблок, то сообщите ему, что такого количества яблок нет. Иначе позвольте ему съесть столько яблок, сколько он попросит.". Основной синтаксис оператора if / else следующий: if(условие){ // код, который выполняется, когда справедливо условие if } else { // код, который выполняется, когда условие if ложно } Необходимо отметить открывающую и закрывающую скобки, { и }, в приведенном выше коде. Открывающая скобка сообщает коду, где начинается блок кода, а закрывающая скобка указывает коду, где блок заканчивается. Поэтому все между { и } выполняется как часть оператора if. Необходимо отметить, что закрывающая скобка оператора if размещается непосредственно перед ключевым словом "else". Оператор else имеет свой собственный набор скобок и свой собственный блок для выполнения. Две косые черты // в приведенном примере говорят коду, что здесь находится комментарий. Комментарий является частью кода, которая не выполняется. Они обычно используются для описания функций реального кода, чтобы не требовалось изучать код для выяснения, что он делает. Если, например, имеется очень длинный фрагмент кода, который проверяет входящие данные формы, то будет вполне разумно вставить комментарий, говорящий что-нибудь вроде "Следующий код проверяет ввод пользователя в форму ". В этом случае любой, кто будет просматривать код, или сам автор кода несколько месяцев спустя после написания, сразу поймет, что этот код делает. В JavaScript существует два способа записи комментариев. Первый, который мы уже видели, состоит в использовании //. Все следующее за // до конца строки считается комментарием и поэтому игнорируется при выполнении кода. Другой способ состоит в использовании комбинаций символов /* и */, в этом случае все, что находится между ними, игнорируется. // это однострочный комментарий /* если требуется более длинный комментарий, то лучше использовать "блочный комментарий". Этот комментарий является блочным комментарием, и полностью игнорируется при выполнении кода */ Для короткого сценария комментарии не всегда нужны. Но когда код длинный, они становятся необходимостью. Программистам очень часто приходится просматривать тысячи строк кода в попытке найти место для исправления ошибки. Если код имеет хорошие комментарии, то достаточно легко почти точно определить, где находится нужный код. Вернемся к нашему оператору if, if(eaten > 5){ alert('Простите, но имеется только 5 яблок. Вы не можете съесть ' + eaten + ' яблок!'); } else { apples -= eaten; alert('А теперь имеется только ' + apples + ' яблок!'); } Можно видеть, что условием является "eaten > 5 ". Знак > означает "больше чем ", так что это условие означает "если eaten больше 5 ". Аналогично, < означает "меньше чем ". Существует два других аналогичных знака >= и <=, которые означают "больше чем или равно " и " меньше чем или равно " соответственно. В приведенном выше коде мы сообщаем пользователю о том, что он ввел значение больше 5 яблок. Только если он выбрал меньше 5 яблок, это число вычитается из текущего количества яблок и затем пользователю сообщается, сколько яблок осталось. Однако существует еще два возможных случая. Что, если пользователь введет число меньше 0? Что, если он введет значение, которое не является числом? Первый случай читатель может теперь обработать самостоятельно. Второй случай требует использования другой встроенной функции, isNaN. При попытке преобразовать что-нибудь в число с помощью функции parseInt, возвращается значение "NaN", если функция не может выполнить операцию. NaN означает "Not a Number " (Не число). Если вызвать функцию parseInt, например, со значением "apple ", то будет получено значение NaN, так как слово "apple " не является числом. var apples = 5; alert('Имеется ' + apples + ' яблок!'); var eat = prompt('Сколько яблок вы хотите съесть?', '1'); var eaten = parseInt(eat); if(isNaN(eaten)){ alert('Вы должны ввести допустимое число яблок!'); } else if(eaten > apples){ alert('Простите, но имеется только ' + apples + ' яблок. Вы не можете съесть ' + eaten + ' яблок!'); } else if(eaten < 0){ alert('Простите, но вы не можете съесть отрицательное количество яблок!'); } else { apples -= eaten; alert('А теперь имеется только ' + apples + ' яблок!'); } Теперь все это должно быть понятно читателю. Прежде всего проверяется, что введено допустимое значение. Если значение недопустимо, выводится соответствующее сообщение. Затем проверяется, что введенное число не превышает количество существующих яблок, а затем - что это число не является отрицательным. Если все эти проверки проходят успешно, пользователь сможет съесть столько яблок, сколько захочет. В коде сделано еще одно изменение, вместо " if(eaten > 5) " используется " if(eaten > apples) ". Если в последующем количество имеющихся яблок "var apples = 5; " изменится, то это изменение пришлось бы делать только в одном месте. Старайтесь всегда использовать в коде переменные. Если значения "жестко закодированы", как было сделано ранее в коде "if(eaten > 5) ", то очень часто при внесении изменений придется подолгу искать эти жестко закодированные значения, чтобы убедиться, что внесены все необходимые изменения. Если пользователь ввел каким-либо образом недопустимое значение, то можно попросить его повторно ввести количество яблок, которое он хочет съесть. Одним из способов сделать это было бы копирование всего кода несколько раз. Однако обычно это не самое лучшее решение. Что, если пользователь вводит недопустимое значение снова и снова? Можно продолжить копирование кода, но легко видеть, что это крайне неэффективно и очень трудно поддерживать код в рабочем состоянии. В этом случае лучшим решением будет использование так называемой функции. Функция содержит код, который выполняет определенную задачу. Мы уже видели использование функций "alert", "prompt", "parseInt" и "isNaN", которые встроены в язык JavaScript. Преимущество использования функций состоит в том, что можно выполнять один и тот же блок кода снова и снова, не копируя этот код, Для выполнения функции необходимо написать ее имя, за которым следуют скобки (), а все значения, передаваемые в функцию, записываются между скобками. var apples = 5; function eatApples(){ alert('Имеется ' + apples + ' яблок!'); var eat = prompt('Сколько яблок вы хотите съесть?', '1'); var eaten = parseInt(eat); if(isNaN(eaten)){ alert('Вы должны ввести допустимое число яблок!'); eatApples(); } else if(eaten > apples){ alert('Простите, но имеется только ' + apples + ' яблок. Вы не можете съесть ' + eaten + ' яблок!'); eatApples(); } else if(eaten < 0){ alert('Простите, но вы не можете съесть отрицательное количество яблок!'); eatApples(); } else { apples -= eaten; alert('А теперь имеется только ' + apples + ' яблок!'); if(apples > 0){ if(confirm('Не хотите съесть еще яблочко?')){ eatApples(); } } else { alert('Яблок больше нет!'); } } } Здесь весь наш код записан в виде функции с именем eatApples. Можно видеть, что каждый раз, когда пользователь вводит неверное значение, снова вызывается функция eatApples, "eatApples();", чтобы пользователь мог ввести новое значение. Когда пользователь вводит допустимое значение, то он либо может еще есть яблоки, либо, если все яблоки закончились, он получит соответствующее сообщение. Здесь используется также одна новая функция, "confirm". Функция confirm просто выводит пользователю приглашение "OK or Cancel " ("Да или Отмена"). Если пользователь нажмет кнопку "OK", то функция возвращает значение true (да). Если пользователь нажмет кнопку "Cancel" или просто закроет окно, то функция confirm возвращает значение false (нет). Поэтому в нашем примере функция eatApples вызывается снова только в том случае, когда пользователь щелкнет на кнопке "OK". В конце этой лекции будет рассмотрена область действия переменной. Как можно видеть, в последнем примере переменная apples находится вне функции eatApples. Это делает переменную "apples" "глобальной переменной", т.е. она будет доступна из любой функции. Переменная "eat", с другой стороны, является локальной переменной и существует только внутри функции eatApples. Кроме того, каждый раз при вызове функции eatApples переменная eat не будет существовать, пока не будет снова определена функцией prompt. Чтобы увидеть эту концепцию в действии, напишем две простые функции счета: function counting1(){ var count = 0; count++; alert(count); } var count = 0; function counting2(){ count++; alert(count); } Если запустить этот пример в браузере и щелкнуть на каждой кнопке несколько раз, то можно заметить, что counting1 всегда выдает одно и то же значение, 1. counting2, с другой стороны, выдает увеличивающееся число. Почему это происходит? Посмотрим просто сначала на counting1. Можно видеть, что каждый раз при выполнении counting1 прежде всего создается переменная count и ее значение задается равным 0. В следующей строке переменная count увеличивается на 1. Оператор ++ пока еще не встречался. count++ просто увеличивает count на 1. Другими словами, это в точности то же самое, что написать "count += 1 " или " count = count + 1 ". Поскольку увеличение на 1 является в программировании очень распространенным действием, то для него существует специальный оператор. Аналогично оператор -- вычитает 1 из переменной: "count-- ". Каждый раз, когда функция counting1 выполняет "alert(count) ", она сообщает значение новой переменной count , которое только что было определено как 0+1. Теперь посмотрим на counting2. Можно видеть, что переменная count в этом случае находится вне функции. Даже до вызова этой функции значение count задано как 0. При вызове counting2 прежде всего происходит увеличение переменной count на 1. Так как мы не восстанавливаем значение count в 0, как в случае counting1, то переменная count продолжает сохранять свое значение, и все происходит, как и предполагалось. Теперь читатель получил общее понимание некоторых фундаментальных понятий программирования и JavaScript, в частности. В следующей лекции будут рассмотрены циклы и формы. |
Дата добавления: 2015-09-23; просмотров: 1040;