Оглавление

8. Преобразование типов данных

Что будет, если к числу прибавить строку?

  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-браузера отобразится следующий текст:

 

До преобразования типов:
Значение суммы чисел 5 и 5 равно 55

После преобразования типов:
Значение суммы чисел 5 и 5 равно 10

 

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

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити