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_Str1 + " и ");
document.write(m_Str2 + " равно " + m_Sum2);
}
}
//-->
</SCRIPT>
</BODY>
</HTML>
Если в обоих диалоговых окнах набрать число 5, то в окне Web-браузера отобразится следующий текст:
До преобразования типов:
Значение суммы чисел 5 и 5 равно 55
После преобразования типов:
Значение суммы чисел 5 и 5 равно 10
Итак диалоговые окна возвращают в качестве типа значения строку. Чтобы получить сумму двух чисел, указанных в полях диалоговых окон, нужно обязательно произвести преобразование типов, иначе мы получим еще одну строку,а не сумму.
3.9. Специальные символы. Разбиение сообщения в диалоговом окне на несколько строк
Листинг 3.10. Специальные символы
<HTML>
<HEAD>
<TITLE>Первая программа</TITLE>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
window.alert("Строка1\nСтрока2\n\nСтрока4");
//-->
</SCRIPT>
</BODY>
</HTML>
Перечислим специальные символы, доступные в JavaScript: