Спонсор: Microsoft
Сибирский федеральный университет
Опубликован: 01.09.2010 | Доступ: свободный | Студентов: 3822 / 330 | Оценка: 4.08 / 3.78 | Длительность: 11:06:00
Лекция 9:

Сценарии Javascript

Первоначально разработанный в 1995 году Бренданом Эйком (Brendan Eich), работавшим в Netscape, в сотрудничестве с Sun Microsystems, язык сценариев Javascript является объектно-ориентированным языком. Изначально Javascript предназначался для разработки клиентских приложений в веб-браузере с целью расширения пользовательского интерфейса и разработки динамических веб-страниц. В 1997 году язык был стандартизирован Европейской ассоциацией производителей компьютеров (European Computer Manufacturers Association, ECMA) под названием ECMAScript (ECMA-262). Internet Explorer, начиная с версии 3.0 (1996), поддерживает диалект ECMAScript, названный JScript. Как любой живой язык, JScript развивался, и Internet Explorer 8.0 использует версию языка JScript 5.8, основанную на 3 издании стандарта ECMA-262. В целом, диалекты ECMAScript достаточно близки, по этой причине Javascript и JScript часто считаются синонимами.

Несмотря на сходство названий, Javascript не является родственником Java, оба языка наследовали свой синтаксис от языка C.

Характеристики языка Javascript

Javascript поддерживает синтаксис структурного программирования языка C, включая ветвление (инструкции if…, if…else… и switch ) и циклы (инструкции for и while ).

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

Javascript почти полностью построен как объектный язык. Фактически, объекты Javascript – это ассоциативные массивы; запись obj.x = 10 эквивалентна obj["x"] = 10 и obj[0] = 10 (полагая, что x является первым по счету свойством объекта obj ). Свойства объекта и их значения могут добавляться, изменяться и удаляться динамически.

Функция eval() позволяет выполнять инструкции, заданные в виде строки.

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

Внутренние функции (определенные внутри других функций) создаются, когда выполняется внешняя функция, и переменные внешней функции доступны для внутренней даже когда внешняя функция завершила работу.

Javascript не использует понятия классов. Наследование осуществляется через механизм прототипов ( prototype ), то есть клонирования существующих объектов.

Функции могут выступать в качестве конструкторов объектов. В этом случае ключевое слово this относится к создаваемому объекту.

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

Функции в Javascript могут принимать произвольное число аргументов, в том числе и не описанные при определении функции. Доступ к ним осуществляется как через формальные параметры функции, так и через свойство arguments функции.

Вставка сценария в HTML-документ

Сценарий Javascript вставляется в HTML-документ при помощи тэга script.

<script type="text/javascript">
  document.write('Hello from Javascript');
</script>

Сценарий может также храниться в отдельном файле.

<script type="text/javascript" src="myscript.js"></script>

Атрибут language элемента script описывает используемый язык сценариев (например, Javascript). Этот атрибут считается устаревшим и не рекомендуется к использованию.

Элементы script могут присутствовать в неограниченном числе внутри элементов head и body HTML-документа.

Переменные и типы данных

Javascript во многом наследовал синтаксис языка C, а это значит, что строчные и заглавные буквы в идентификаторах различаются. Нет необходимости специально объявлять переменные, хотя это является хорошей программистской практикой. Первое появление переменной автоматически является ее объявлением. Имя переменной должно начинаться с буквы или символа подчеркивания (_), последующими символами могут быть буквы, цифры и символ подчеркивания (_). Нельзя использовать в качестве имен переменных зарезервированные слова, такие как if, for, function, new. Для объявления переменной может использоваться необязательное слово var. Его использование обязательно только в том случае, если переменная объявляется внутри функции и пределом видимости этой переменной должна быть эта функция. Переменные, объявленные без использования var, являются глобальными. Примеры правильного объявления:

var test; //объявление без присвоения. Значение переменной undefined
  a = 2;
  var b2 = 3; 
  sum_a_b2 = a + b2;

Примеры недопустимых имен:

var 3piglets // начинается с цифры
var Smith&Wesson // символ & не допускается
var for // for является зарезервированным словом

В Javascript есть три простых типа данных: строка ( String ), число ( Number ) и логический тип ( Boolean ), два составных типа: объект ( Object ) и массив ( Array ) и два специальных типа: пустое значение ( Null ) и неопределенное значение ( Undefined ). Тип данных ассоциирован не с именем переменной, а с ее значением.

Строковые данные – любая цепочка символов, заключенная в одиночные (') или двойные кавычки ("). Одиночные кавычки могут содержаться в строках, заключенных в двойные кавычки и наоборот.

"простая строка"
'еще одна строка'
"don't worry"

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

Число Десятичное представление Описание
0.0001, .0001, 1e-4, 1.0e-4 0.0001 Разные представления числа с плавающей запятой
125 125 Целое
0377 255 Восьмеричное представление целого
0378 378 Десятичное целое. Восьмеричное представление допускает лишь цифры от 0 до 7
0xff 255 Шестнадцатеричное представление
0x3e7 999 Шестнадцатеричное представление
00.001 0x0.001 - Ошибка компиляции. Восьмеричные и шестнадцатеричные числа могут быть только целыми

Данные логического (Boolean) типа принимают лишь одно из двух значений: true (истина) или false (ложь).

y = (x == 10); //истина, если x равно 10

Чаще всего логические данные или выражения, возвращающие логические данные, используются в управляющих структурах:

if (x == 10)
    a = c; // выполняется, если x равно 10
  else
    a = b; // выполняется в противном случае

В качестве логического может быть использовано любое выражение, например, число, строка, массив или объект, при этом, если значение равно 0, пустой строке, пустому (не содержащему элементов) массиву, пустому объекту ( Null ) или неопределенному значению ( undefined ), то условие оценивается как false (ложь), в противном случае как true (истина). Например, две следующие конструкции эквивалентны.

if (x != 0)//если x не равен 0
      a = 1;

    if (x)
      a = 1;

Массив представляет собой данные, доступ к элементам которых осуществляется по индексу. Массивы в Javascript создаются следующим образом:

var a = new Array();// создает новый пустой массив
var b = new Array(N);//где N – положительное целое. 
//Создает массив из N пустых элементов
var c = new Array(elem1, elem2 ...);
//создает массив из перечисленных элементов. 
//Элементы должны существовать заранее.
var d = [elem1, elem2 ...];
//создает массив из перечисленных элементов
var e = [];// создает новый пустой массив

Индексация массивов всегда начинается с нуля (0), то есть последний существующий элемент имеет индекс на 1 меньше длины массива.

document.write(c[0]); //будет выведен первый элемент массива c
    a[0] = 1; // присвоение значения первому элементу массива a
    a[10] = 10; // присвоение значения одиннадцатому элементу массива a
    // элементы 1 – 9 заполняются пустыми значениями.
    // длина массива a.length равна 11
    document.write(a[10]); // печатает 10
    document.write(a[11]); //печатает пустую строку и не меняет длину массива

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

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Андрей Лучицкий
Андрей Лучицкий
Россия