Глава 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, автора не буду называть, где при помощи
всевозможных преобразований типов данных была попытка запутать программу для "непродвинутых"
пользователей. Так вот, нужно запомнить два правила:
| Главная |