Приднестровская поддержка XOOPS
Что будет, если к числу прибавить строку?
var Str = "5"; var Number1 = 3; var Str2 = Number1 + Str; // Переменная содержит строку "35" var Str3 = Str + Number1; // Переменная содержит строку "53"
В этом случае интерпретатор столкнется с несовместимостью типов данных и попытается преобразовать переменные к одному типу данных, а затем выполнить операцию. В нашем случае переменная Numberl, имеющая тип number (число), будет преобразована к типу string (строка), а затем будет произведена операция конкатенации строк.
А что будет, если из числа вычесть строку, число умножить на строку или число разделить на строку?
var Number1 = 15;
var Str = "5";
var Str2 = Number1 - Str; // Переменная содержит число 10
var Str3 = Number1 * Str; // Переменная содержит число 75
var Str4 = Number1 / Str; // Переменная содержит число 3
Итак, интерпретатор попытается преобразовать строку в число, а затем вычислить выражение.
Причем не важно, в какой последовательности будут указаны число и строка:
var Str5 = Str * Number1; // Переменная все равно содержит число 75
Но что будет, если в строке будут одни буквы?
var Number1 = 15; var Str = "Строка"; var Str2 = Number1 - Str; // Переменная содержит значение NaN
В этом случае интерпретатор не сможет преобразовать строку в число и присвоит переменной значение NaN (Not a Number, не число).
С одной стороны, хорошо, что интерпретатор делает преобразование типов данных за нас. Но с другой стороны, можно получить результат, который вовсе не планировался. По этой причине лучше оперировать переменными одного типа, а если необходимо делать преобразования типов, то делать это самим.
Для преобразования типов данных можно использовать следующие встроенные функции JavaScript:
□ parseint (<строка>, [<0снование>]) преобразует строку в целое число. Строка считается заданной в системе счисления, указанной вторым необязательным параметром. Если основание не указано, то по умолчанию используется десятичная система. Если строка не может быть преобразована в число, возвращается значение NaN:
var Number1 = 15;
var Str = "5";
var Str5 = "FF";
var Str2 = Number1 - parseInt(Str);
// Переменная содержит число 10
var Str3 = Number1 - parseInt(Str5, 16);
// Переменная содержит число -240
var Str4 = Number1 + parseInt(Str);
// Переменная содержит число 20
□ parseFioat (<строка>) преобразует строку в число с плавающей точкой:
var Str = "5.2"; var Str2 = parseFloat(Str); // Переменная содержит число 5.2
□ eval (<строка>) вычисляет выражение в строке, как будто это было обычное выражение JavaScript:
var Str = "3 + 5";
var Str2 = eval(Str); // Переменная содержит число 8
Приведем пример использования преобразования типов данных. Просуммируем два числа, введенных пользователем в поля двух диалоговых окон (листинг 9).
Листинг 9. Вычисление суммы двух чисел
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Вычисление суммы двух чисел</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<script type="text/javascript">
<!--
var Str1, Str2, Sum1, Sum2, msg;
Str1 = window.prompt("Вычисление суммы двух чисел\nВведите число 1", "");
if (Str1==null) {
document.write("Вы нажали Отмена");
}
else {
Str2 = window.prompt("Вычисление суммы двух чисел\nВведите число 2", "");
if (Str2==null) {
document.write("Вы нажали Отмена");
}
else {
Sum1 = Str1 + Str2;
msg = "До преобразования типов:<br>Значение суммы чисел ";
msg += Str1 + " и " + Str2 + " равно ";
msg += Sum1 + "<br><br>";
Sum2 = parseInt(Str1) + parseInt(Str2);
msg += "После преобразования типов:<br>";
msg += "Значение суммы чисел " + Str1 + " и ";
msg += Str2 + " равно " + Sum2;
document.write(msg);
}
}
//-->
</script>
</body>
</html>
Если в обоих диалоговых окнах набрать число 5, то в окне Web-браузера отобразится следующий текст:
Итак, диалоговые окна возвращают в качестве типа значения строку. Чтобы получить сумму двух чисел, указанных в полях диалоговых окон, нужно обязательно произвести преобразование типов, иначе мы получим еще одну строку, а не сумму.
Отправитель | Нити |
---|
10 пользователь(ей) активно (2 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 10 далее... |