- •1. Основные понятия
- •3.4.2. Окно с сообщением и кнопками ok и Cancel
- •3.4.3. Окно с полем ввода и кнопками ok и Cancel
- •3.6. Типы данных и инициализация переменных. Определение типа данных переменной
- •3.7. Операторы JavaScript
- •3.7.1. Математические операторы
- •3.7.2. Операторы присваивания
- •3.7.3. Двоичные операторы
- •3.7.4. Оператор обработки строк
- •3.8. Преобразование типов данных
- •3.9. Специальные символы. Разбиение сообщения в диалоговом окне на несколько строк
- •3.10. Массивы
- •3.11. Функции. Разделение программы на фрагменты
- •3.11.1. Основные понятия
- •3.11.2. Расположение функций внутри html-документа
- •3.11.3. Рекурсия. Вычисление факториала
- •3.11.4. Глобальные и локальные переменные
- •3.12. Условные операторы. Выполнение блоков кода только при соответствии условию
- •3.12.1. Операторы сравнения
- •3.12.2. Оператор ветвления if...Else. Проверка ввода пользователя
- •3.12.3. Оператор ? Проверка числа на четность
- •3.12.4. Оператор выбора switch
- •3.13. Операторы циклов. Многократное выполнение блока кода
- •3.13.1. Цикл for
- •3.13.2. Цикл while
- •3.13.3. Цикл do...While
- •3.13.4. Оператор continue.
- •3.13.5. Оператор break. Прерывание цикла
- •3.14. Ошибки в программе
- •3.14.1. Синтаксические ошибки
- •3.14.2. Логические ошибки
- •3.14.3. Ошибки времени выполнения
- •3.15. Встроенные классы JavaScript
- •3.15.1. Основные понятия
- •3.15.2. Класс Global
- •3.15.3. Класс Number. Работа с числами
- •3.15.4. Класс String. Обработка строк
- •3.15.5. Класс Array. Работа с массивами и их сортировка
- •Многомерные массивы
- •Ассоциативные массивы. Перебор ассоциативных массивов
- •3.15.6. Класс Math. Использование математических функций
- •3.15.7. Класс Date. Получение текущей даты и времени. Вывод даты и времени в окне Web-браузера
3.7. Операторы JavaScript
3.7.1. Математические операторы
+ – сложение: m_Z=m_X+m_Y;
m_Z=m_X-m_Y;
m_Z=m_X*m_Y;
m_Z=m_X/m_Y;
% – деление по модулю m_Z=m_X%m_Y;
++ – оператор инкремента: m_Z++; //Эквивалентно m_Z=m_Z+1;
-- – оператор декремента: m_Z--; //Эквивалентно m_Z=m_Z-1;
Операторы инкремента и декремента могут использоваться в постфиксной или префиксной формах:
m_Z++; m_Z--; // Постфиксная форма
++m_Z; --m_Z; // Префиксная форма
В чем разница? При постфиксной форме (m_z++) возвращается значение, которое переменная имела перед операцией, а при префиксной форме (++m_z) – вначале производится операция и только потом возвращается значение. Про демонстрируем разницу на примере (листинг 3.7).
Листинг 3.7. Постфиксная и префиксная форма
<HTML>
<HEAD>
<TITLE>Постфиксная и префиксная форма</TITLE>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
var m_X, m_Z;
m_X=5;
m_Z=m_X++; // m_Z=5, m_X=6
var m_Str;
m_Str = "<B>Постфиксная форма (m_Z=m_X++;):</B><BR> m_Z = ";
m_Str += m_Z + "<BR>m_X = " + m_X + "<BR><BR>";
document.write(m_Str);
m_X=5;
m_Z=++m_X; // m_Z=6, m_X=6
m_Str = "<B>Префиксная форма (m_Z=++m_X;):</B><BR> m_Z = ";
m_Str += m_Z + "<BR>m_X = " + m_X;
document.write(m_Str);
//-->
</SCRIPT>
</BODY>
</HTML>
3.7.2. Операторы присваивания
m_Z=m_X;
m_Z+=5; // Эквивалентно m_Z=m_Z+5;
m_Z-=5; // Эквивалентно m_Z=m_Z-5;
m_Z*=5; // Эквивалентно m_Z=m_Z*5;
m_Z/=5; // Эквивалентно m_Z=m_Z/5;
m_Z%=5; // Эквивалентно m_Z=m_Z%5;
3.7.3. Двоичные операторы
m_Z=~m_X;
m_Z = m_X & m_Y;
m_Z = m_X | m_Y;
m_Z = m_X ^ m_Y;
m_Z = m_X << m_Y;
m_Z = m_X >> m_Y;
m_Z = m_X >>> m_Y;
3.7.4. Оператор обработки строк
+ — оператор конкатенации строк:
var m_Z = "Строка1" + "Строка2";
// Переменная m_Z будет содержать значение "Строка1Строка2"
Часто необходимо сформировать строку, состоящую из имени переменной и ее значения. Если написать
var m_X = "Строка1";
var m_Z = "Значение равно m_X";
то переменная m_z будет содержать значение "Значение равно m х", а если так
var m_X = "Строка1";
var m_Z = "Значение равно " + m_X;
то переменная m_Z будет содержать значение "Значение равно Строка1”
Листинг 3.8 демонстрирует вывод значения переменной в диалоговом окне.
Листинг 3.8. Вывод значения переменной
<HTML>
<HEAD>
<TITLE>Оператор обработки строк</TITLE>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
var m_X = "Строка1";
window.alert("Переменная m_X содержит значение 'm_X'");
// Выведет "Переменная m_X содержит значение 'm_X'"
window.alert("Переменная m_X содержит значение '" + m_X + "'");
// Выведет "Переменная m_X содержит значение 'Строка1'"
//-->
</SCRIPT>
</BODY>
</HTML>
3.8. Преобразование типов данных
Что будет, если к числу прибавить строку?
var m_Str = "5";
var m_Number = 3;
var m_Str2 = m_Number + m_Str; // Переменная содержит строку "35"
var m_Str3 = m_Str + m_Number; // Переменная содержит строку "53"
В этом случае интерпретатор столкнется с несовместимостью типов данных и попытается преобразовать переменные к одному типу данных, а затем выполнить операцию. В нашем случае переменная m__Number, имеющая тип number (число), будет преобразована к типу string (строка), а затем будет произведена операция конкатенации строк.
А что будет, если из числа вычесть строку, число умножить на строку и. число разделить на строку?
var m_Number = 15;
var m_Str = "5";
var m_Str2 = m_Number - m_Str; // Переменная содержит число 10
var m_Str3 = m_Number * m_Str; // Переменная содержит число 75
var m_Str4 = m_Number / m_Str; // Переменная содержит число 3
Итак, интерпретатор попытается преобразовать строку в число, а затем вычислить выражение. Причем не важно, в какой последовательности будут указаны число и строка:
var m_Str5 = m_Str * m_Number; // Переменная все равно содержит число 75
Но что будет, если в строке будут одни буквы?
var m_Number = 15;
var m_Str = "Строка";
var m_Str2 = m_Number - m_Str; // Переменная содержит значение NaN
В этом случае интерпретатор не сможет преобразовать строку в число и присвоит переменной значение NaN (Not a Number, нет числа).
С одной стороны, хорошо, что интерпретатор делает преобразование типов данных за нас. Но с другой стороны, можно получить результат, который вовсе не планировался. По этой причине лучше оперировать переменными одного типа, а если необходимо делать преобразования типов, то делать это самим.
Для преобразования типов данных можно использовать следующие встроенные функции JavaScript:
parseInt(<Строка>,[<Основание>]) преобразует строку в целое число. Строка считается заданной в системе счисления, указанной вторым необязательным параметром. Если основание не указано, то по умолчанию используется десятичная система. Если строка не может быть преобразована в число, возвращается значение NaN.
var m_Number = 15;
var m_Str = "5";
var m_Str5 = "FF";
var m_Str2 = m_Number - parseInt(m_Str); // Переменная содержит число 10
var m_Str3 = m_Number - parseInt(m_Str5, 16);
// Переменная содержит число -240
var m_Str4 = m_Number + parseInt(m_Str); // Переменная содержит число 20
parseFloat(<Строка>) преобразует строку в число с плавающей точкой:
var m_Str = "5.2";
var m_Str2 = parseFloat(m_Str); // Переменная содержит число 5.2
eval(<Строка>) вычисляет выражение в строке, как будто это было обычное выражение JavaScript:
var m_Str = "3 + 5";
var m_Str2 = eval(m_Str); // Переменная содержит число 8
Приведем пример использования преобразования типов данных. Просуммируем два числа, введенных пользователем в поля двух диалоговых окон (листинг3.9).
Листинг 3.9. Вычисление суммы двух чисел
<HTML>
<HEAD>
<TITLE>Преобразование типов данных</TITLE>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
var m_Str1, m_Str2, m_Sum1, m_Sum2;
m_Str1=window.prompt("Вычисление суммы двух чисел\nВведите число 1", "");
if (m_Str1==null) {
document.write("Вы нажали Отмена");
}
else {
m_Str2=window.prompt("Вычисление суммы двух чисел\nВведите число 2", "");
if (m_Str2==null) {
document.write("Вы нажали Отмена");
}
else {
m_Sum1=m_Str1 + m_Str2;
document.write("До преобразования типов:<BR>Значение суммы чисел ");
document.write(m_Str1 + " и " + m_Str2 + " равно ");
document.write(m_Sum1 + "<BR><BR>");
m_Sum2=parseInt(m_Str1) + parseInt(m_Str2);
document.write("После преобразования типов:<BR>");
document.write("Значение суммы чисел " + m_Str1 + " и ");
document.write(m_Str2 + " равно " + m_Sum2);
}
}
//-->
</SCRIPT>
</BODY>
</HTML>
Если в обоих диалоговых окнах набрать число 5, то в окне Web-браузера отобразится следующий текст:
До преобразования типов:
Значение суммы чисел 5 и 5 равно 55
После преобразования типов:
Значение суммы чисел 5 и 5 равно 10
Итак диалоговые окна возвращают в качестве типа значения строку. Чтобы получить сумму двух чисел, указанных в полях диалоговых окон, нужно обязательно произвести преобразование типов, иначе мы получим еще одну строку, а не сумму.