Работа с переменными и их значениями
Начнутся народные советы с решения проблем с переменными и хранящимися в них
значениями.
Как проверить существование переменной?
Проблема
Как проверить, была ли уже объявлена какая-либо переменная?
Решение
Проще всего воспользоваться оператором typeof, возвращающим в строковом виде
тип значения переменной. В случае еще не объявленной переменной он вернет строку
"undefined".
Вот шаблон выражения, выполняющего проверку на существование переменной:
if (typeof(<Имя проверяемой переменного) == "undefined")
<Код, выполняемый, если переменная не объявлена> else
<Код, выполняемый, если переменная объявлена>
Пример
if (typeof(pi) == "undefined") pi = 3.14;
Как избежать конфликтов имен переменных?
Проблема
Имеется большой проект, содержащий множество глобальных переменных, причем
различные части этого проекта написаны разными разработчиками. Имеется ли
какой-либо способ избежать конфликтов имен переменных, т. е. исключить ситуации,
когда один разработчик объявляет переменную с именем, уже использованным другим
разработчиком в другой части того же сценария?
Решение
Решение здесь будет чисто организационное. Нужно просто продумать систему
именования глобальных переменных и строго ей следовать. Система эта может быть,
скажем, такой:
<Аббревиатура проекта>_<Аббревиатура части проекта>_<Тип
данных> [_<Подтип данных>]
Здесь:
Аббревиатура проекта содержит наименование проекта (скажем, emag —
электронный магазин);
Аббревиатура части проекта указывает на часть проекта, разрабатываемую данным
программистом (например, checkData — код, выполняющий проверку введенных
покупателем данных о себе);
Тип данных обозначает тип хранящегося в переменной значения (так, если
переменная хранит сведения о покупателе, Тип данных можно назвать
custData);
необязательный Подтип данных можно использовать для указания на отдельную
часть данных, относящихся к заданному ранее Типу данных (для имени покупателя
это может быть custName).
Народ советует
Эту систему можно расширить. Так, функции, реализующие методы объектов (о них
мы поговорим далее в этой главе), могут иметь имена, начинающиеся на букву "т",
а параметры функций — на букву "р". Также в имена функций, реализующих методы
объектов, можно включить аббревиатуру, обозначающую объект, для которого они
предназначены. Кстати, далее в своей книге автор так и делает.
Пример
var emag_checkData_custData_custName = getCustName();
Народ советует
Вообще, чем длиннее имя какой-либо переменной, тем меньше вероятность что
где-то в коде встретится другая переменная с таким же именем. Следует иметь это
в виду.
Как создать константу? Проблема
В коде сценария JavaScript часто используется одно и то же строковое или
числовое значение. Можно ли вместо того, чтобы каждый раз указывать это
значение, создать на его основе именованную константу и впоследствии
использовать именно ее?
Решение
К сожалению, в отличие от других языков программирования, JavaScript не
предоставляет никаких способов создать именованные константы. Но можно создать
переменную, назвать ее каким-либо особым образом и присвоить ее нужное значение,
создав, если можно так сказать, псевдоконстанту. Единственное "но": впоследствии
не следует изменить значение этой переменной (константа она, в конце концов, или
нет!).
Константы имеют одно неоспоримое преимущество. Если нам понадобится в
дальнейшем изменить значение какой-нибудь константы, нам будет достаточно
сделать это всего один раз — в выражении, объявляющем соответствующую
переменную-псевдоконстанту. Если же мы не использовали константу, то будем
вынуждены просмотреть все наши сценарии и исправить все использующие нужное нам
значение выражения. А это зачастую очень трудоемко.
Пример
var EMAG_VERSION = "1.0";
document.write("Электронный магазин " + EMAG_VERSION);
document.write("Версия: " + EMAG_VERSION);
Этот сценарий сначала объявляет переменную-псевдоконстанту emag_version,
хранящую номер версии электронного магазина, а потом выводит этот номер на
Web-страницу в двух местах.
Народ советует
Хорошим тоном программирования считается именование констант только большими
буквами. Так мы, с одной стороны, сразу дадим своим коллегам понять, что это
именно константа, а с другой — избежим возможных конфликтов имен.
Также хорошим тоном программирования считается вынесение всех глобальных
констант, используемых в нескольких сценариях, в отдельный файл сценариев. Этот
файл можно назвать, скажем, constants.js. Разумеется, этот файл придется потом
подключить к Web-странице с помощью тега
<SCRIPT SRC= "constants.js"></SCRIPT>
О файлах сценариев будет подробно рассказано в главе 2.