Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JavaScript_основы.doc
Скачиваний:
9
Добавлен:
04.11.2018
Размер:
322.05 Кб
Скачать

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]