C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Глава 9
 

Глава 9

Переменные языка JavaScript



Честно сказать я с начала не хотел вводить эту тему. Что можно говорить о переменных, особенно в JavaScript? Но потом вспомнил, как иногда разбирался со сложными конструкциями и с трудом понимал некоторые, казалось бы недопустимые в других языках программирования выражения. Можно сказать так: здесь вам не будет ошибки "Неверный тип данных", а если и будет то очень редко. Если вы работали с другими языками программирования, тогда вспомните как часто у вас возникала ошибка о неверных типах данных. В языке JavaScript тип данных может с легкостью переопределяться, при этом вы можете и не заметить в каком месте, - вот в этом то и сложность. С другой стороны, если вы будете хорошо ориентироваться в принципах преобразований типов, знать все свойства переменных и массивов, эти возможности только принесут вам уверенность в написании программ.

    Переменные языка JavaScript могут хранить значения различных типов:

    Время жизни переменной связано с окном, в котором они созданы и зависит от того, где они определены. JavaScript- программы содержатся в документах HTML, и при загрузке нового документа в браузер любые переменные, созданные в программе, будут удалены.
    Чтобы сохранить какие-либо значения при загрузке нового документа в JavaScript имеются только 2 решения:

Для сохранения переменных и функций с помощью фреймосодержащих документов эти переменные и функции неодходимо определить в документе верхнего уровня, а затем использовать свойства parent или top объекта window для обращения к ним из документов, загруженных в фреймы. ВАЖНО: такие переменные и функции нужно задавать в заголовке документа верхнего уровня между тегами <HEAD> . . . </HEAD>. Конечно, существует вероятность, что документ может быть загружен без фрейма и тогда обращение к неопределенному объекту вызовет ошибку, но можно предварительно проверить загружен ли документ в фрейм:

<script language="JavaScript">
<!--
if(self.parent.frames.length==0) {
document.writeln('Эта страница загружена в браузер без фрейма.');
}
//-->
</script>

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

Имена переменных, создание переменных

    В языке JavaScript создать переменную гораздо проще, чем в других языках программирования. Например, при создании переменной нет необходимости указывать ее тип. Переменные определяют как с начальными значениями, так и без них. В процессе выполнения программы уже созданные переменные можно даже приводить к различным типам данных. Имена переменных могут начинаться с любой буквы (от a до z, или A-Z ) либо с символа подчеркивания (_), оставшаяся часть может содержать цифры, символы подчеркивания и буквы. Помните то, что в именах переменных различаются символы верхнего и нижнего регистра: например MyVariable - это не то же что myvariable.
    Переменную можно создать одним из способов:

    Оператор Var используют не только для создания переменной, но и для ее инициализации. Операция присваивания (=) необходима, чтобы запомнить в переменной значение, и при работе с переменными, созданными без начального значения, ее использовать не обязательно. Например:

var MyVariable = 35

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

    В языке JavaScript переменные можно переопределять, даже задавая другой тип данных. Например после выполнения оператора

var MyVariable = "35"

переменная будет уже хранить строку "35". Подобные преобразования-то и приводят иногда к недоразумениям. Вот например:


<script language="JavaScript">
<!--
var a = 35, b = "5", c;
c = a + b;
c = c - a;
document.writeln("C=" + c);
//-->
</script>

как вы думаете какое значение примет переменная "c" после выполнения программы? Если вы не знакомы с правилами преобразования переменных в JavaScript - не угадаете. Значение переменной "c" после завершения блока будет равным числовому значению 320. О принципах преобразования типов переменных будем говорить позже. Переменную можно определить и не используя оператор "Var", а просто достаточно присвоить значение, причем каков тип данных будет присвоен, того типа и окажется переменная. Оператор "Var" используется по большей части для читабельности JS-программы. Переменная может быть задана и без начальных значений, например:

var MyVariable;

создана переменная с именем MyVariable, не имеющая определенного типа данных и начального значения. Переменные, создаваемые при помощи таких описаний, известны как неопределенные (null variable). Например сравнивая такую переменную со значением null, можно узнать, определена ли переменная. Однако нельзя путать разные вещи: ""- пустая строка это строковый тип и вовсе не null-значение.

    Тип переменной может быть установлен в любом месте JS-программы в отличие от других языков программирования, что дает дополнительную гибкость, но и возможность запутаться - помните это. К переменной, которая не создана, обратиться невозможно. Если нужно создать временную переменную, например счетчик цикла, нужно записать перед ней префикс var:
for (var i=0; i<= document.links.length; i++) {
. . . . .
}
в данном примере инициализируется переменная i, и затем используется в качестве счетчика оператора for.
    Переменные, определенные с помощью var, разделяются запятой. Для большей читабельности JS-программы каждую переменную записывают обычно с новой строки.

Строковые переменные

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

Самым простым и наиболее распространенным способом создания объекта String является использование таких операторов, как

var myVariable = "Хорошее пиво";

"Хорошее пиво" строковой переменной myVariable. Переменная myVariable рассматривается как строковый объект и может использовать любой из стандартных методов объекта String языка JavaScript. Оператор Var можно пропустить, как и говорилось ранее он нужен в основном для читабельности программы.

    Для создания строковых объектов допускается использовать конструктор String() с оператором new. В действительности объект String не относится к языку JavaScript, а является встроенным объектом браузера главным образом потому, что строки создаются тогда, когда пользователь в них нуждается. Рассмотрим пример:

var myVariable = new String();

Этот оператор создает новый объект - пустую строку с именем myVariable. Изначально это пустая строка (""), а значение свойства myVariable.length равное 0.

    Конструктор String() допускает передачу заданной строки в виде аргумента:

var myVariable = new String("Правильное пиво");

    Строковый объект может содержать специальные символы, управляющие форматированием строк:

<textarea> и в методах "Alert". Форматирование же для document.write() осуществяется другими методами или тегами HTML.
    Объект String имеет только одно свойство - length, значением которого является количество символов в строке, содержащейся в объекте. Методы объекта String можно разделить на две категории:

    Методы форматирования документа применяются для вывода строк в документ, а методы управления строками - для проверки и изменения содержимого объекта String.
Приведем перечень методов: (буква Ф - методы форматирования, а буква У - управления строками)

Метод

 

Описание

anchor() У Создает именованную метку, т.е. тег <a name> из содержимого объекта
big() Ф Заключает строку в контейнер <big> . . . </big>, для отображения крупным шрифтом
blink() Ф Заключает строку в контейнер <blink> . . . </blink>, чтобы она отображалась мигающей.
bold() Ф Заключает строку в контейнер <b> . . . </b>, чтобы она отображалась жирным шрифтом.
charAt() У Возвращает символ, находящийся в заданной позиции строки
fixsed() Ф Заключает строку в контейнер <tt> . . . </tt>, чтобы она отображалась шрифтом постоянной ширины.
fontcolor() Ф Заключает строку в контейнер <font color=colorCode> . . . </font>, чтобы она отображалась определенным цветом.
fontsize() Ф Заключает строку в контейнер <font size=fontSize> . . . </font>, чтобы она отображалась шрифтом определенного размера.
IndexOf() У Возвращает индекс первого заданного символа, найденного в строке.
italics() Ф Заключает строку в контейнер <i> . . . </i>, чтобы она отображалась курсивом.
lastIndexOf() У Возвращает индекс последнего заданного символа, найденного в строке.
link() У Создает тег гиперсвязи <a href> . . . </a> и помещает в него содержимое объекта
small() Ф Заключает строку в тег <small> . . . </small>, чтобы она отображалась шрифтом меньшего размера.
strike() Ф Заключает строку в контейнер <strike> . . . </strike>, чтобы она отображалась зачеркнутой.
sub() Ф Заключает строку в контейнер <sub> . . . </sub>, чтобы она отображалась как нижний индекс.
substring() У Возвращает подстроку текстовой строки.
sup() Ф Заключает строку в контейнер <sup> . . . </sup>, чтобы она отображалась как верхний индекс.
toLowerCase() У Преобразует все буквы строки в строчные
toUpperCase() У Преобразует все буквы строки в прописные



Числовые переменные

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

Кроме того, используют операции умножения, деления, сложения и вычитания в сочетании с присваиванием (*=, /=, +=, -=), а также методы объекта Math.

Булевы переменные

    Булевы, или логические, переменные содержат только литеральные значкения - true и false - и используются в логических выражениях и операторах.
    Для проверки значения булевой переменной используют и операцию логического равенства:
booleanVar == true
true, если значение booleanVar равно false. Вместо слов "true" и "false" можно использовать числовые значения "1" и "2", поскольку именно такбулевы значения представлены в памяти компьютера: 1==true и 0==false.

Переменные-массивы

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

arrayName[index]

где arrayName - имя массива, а index - числовая переменная или число, задающее позицию элемента в массиве. Например, arrayName[0] является первым элементом этого массива. Индексы элементов массива в языке JavaScript начинаются с нуля. Элементы массива могут быть любого типа, например строками или булевыми переменными. Кроме того, при определенных условиях массив может содержать элементы различных типов данных. В языке JavaScript массивы создаются при помощи:

    С помощью конструктора Array() не только создают объект array, но и присваивают начальные значения его элементам. Существует возможность добавлять элементы в массивдинамически - путем присваивания определенных значений элементам массива. Допускается также "пропускать" элементы массива и задавать их в любой последовательности. Для создания нового экземпляра объекта array конструктор Array() необходимо использовать с оператором new. Например, в седующем примере создается массив с именем arrayImg, содержащий два элемента, каждый из которых является объектом String

var path = "c://images/javascript/004/" ,
arrayImg = new Array();
arrayImg[0] = path+"img1.gif";
arrayImg[1] = path+"img2.gif";

    При использовании конструктора Array() значение свойства length устанавливается автоматически. Поэтому после инициализации элементов массива в приведенном примере выражение arrayImg.length возвращает значение 2. Элементы массива также могут быть заданы как параметры конструктора:

var path = "c://images/javascript/004/" ,
arrayImg = new Array(path+"img1.gif", path+"img2.gif");

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

var myArray = new Array(3.14, true, 85, date(), "word");

создает массив, элемент myArray[0] которого является числом с плавающей запятой, элемент myArray[1] - булевым значением, элемент myArray[3] - объектом Date.
    Размер массива и, следовательно, значение свойства length объекта, создаваемого конструктором Array(), зависят от максимального значения индекса, который применялся для задания элемента массива. Например:

var myArray = new Array;
myArray[20] = "Это 21 элемент массива";

двадцать первому элементу массива присваивается строковое значение "Это 21 элемент массива", а значение свойства myArray.length равно 21 независимо от того имеют ли значения элементы массива с индексом меньше 20.
    Значение свойства length объекта Array автоматически устанавливается при явном указании количества элементов в конструкторе Array():

myArray = new Array(10);

оператор создает массив из 10-ти элементов от 0 до 9. Значение свойства length массива нельзя установить путем присваивания, так как length является свойством только для чтения. Например, чтобы задать значение 10 для свойства length нужно только определить значение последнего, в данном случае 9-го элемента массива:

myArray = new Array();
myArray[9] = 0;

    Кроме того, существует возможность задать значения элементов массива при его конструировании :

myArray = new Array(0,0,0,0,0,0);

Конструктор Object()

    Понятия объект и массив равнозначны, хотя конструкторы Object() и Array() работают по-разному. Конструктору Object() невозможно передать несколько элементов массива, поэтому такое выражение
var myObj = new Object(value1, value2);
работать не будет. Массивы, создаваемые при помощи конструктора Object(), не имеют свойства length. Поэтому, создавая массив таким способом, следует либо организовывать обход этого массива посредством цикла for и подсчитать элементы массива, либо жестко задать длину массива как значение его первого элемента (обычно так поступают моделируя свойство length), а затем обращаться к нему по мере необходимости для проверки размера массива, увеличение значения при добавлении нового элемента, а также в качестве параметра цикла при циклическом считывании или изменения значений элементов. Такой объект часто бывает неприемлем для случаев, когда содержимое массива должно динамически изменяться, поэтому в большинстве случаев пользуются конструктором Array(). Значения индексов массивов, создаваемых в конструкторе Object(), также начинаются с нуля. Для создания массива при помощи конструктора Object() принято использовать запись вида:

var myObj = new Object();
myObj[0] = 2; // задаем размерность массива
myObj[1] = "Первый элемент";
myObj[2] = "Второй элемент";

    Чтобы узнать размер массива, созданного подобным образом, необходимо обратиться к элементу myObj[0]. Значением свойства myObj.length является null, так, как значение не определено.

Преобразование строк и чисел

    Наконец подошли к самой интересной теме. Дело в том, что в языке JavaScript в отличие от других языков нет функций типа Val() и Str(). Однажды я видел программку на языке JavaScript, автора не буду называть, где при помощи всевозможных преобразований типов данных была попытка запутать программу для "непродвинутых" пользователей. Так вот, нужно запомнить два правила:

Содержание
Главная