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

Невозможно сложить строку и число. Можно сложить либо два числа, либо две строки между собой. То же самое относится и к другим математическим действиям. Нельзя сравнить между собой логическое значение и число или вычесть из числа строку. Чтобы корректно работать с данными, необходимо привести их к одному типу. В языке JavaScript это можно сделать явным или неявным способом.

Неявное преобразование типов данных

Неявное преобразование типов данных - автоматическое преобразование данных из одного типа в другой. В JavaScript данное преобразование случается, когда необходимо провести операцию над операндами разных типов. Приведём классический пример:

var a, b, c; /*Объявляем переменные a, b, c*/
a=1; /*Задаём значение переменной a*/
b="2"; /*Задаём значение переменной b*/
c=a+b; /*Складываем переменные a и b. Результат этой операции записываем в переменную c*/
alert (c); /*Выводим значение переменной c на экран*/

Посмотрим, что получилось. А получилось 12. Как это так? Переменной a задано числовое значение, переменной b - строковое. Когда над двумя этими операндами производится операция сложения, JavaScript самостоятельно преобразует переменную a к строковому типу, а дальше уже идёт сложение строк, и вместо 3 получается 12. Ниже рассмотрим несколько таблиц, в которых напишем, к какому типу будут преобразованы данные при проведении над ними различных операций.

Преобразование строк

String (строковое значение) Number (числовое преобразование) Boolean (логическое преобразование) Object (преобразование в объекты)
"" (пустая строка) 0 false new String("")
"12" (числовое значение в строке) 12 true new String("12")
"Привет" (строковое значение, записанное в строку) NaN true new String("Привет")

Преобразование чисел

Number (числовое значение) String (строковое преобразование) Boolean (логическое преобразование) Object (преобразование в объекты)
0 "0" false new Number(0)
-0 "0" false new Number(-0)
2 "2" true new Number(2)
NaN "NaN" false new Number(NaN)
Infinity "Infinity" true new Number(Infinity)
-Infinity "-Infinity" true new Number(-Infinity)

Преобразование логических значений

Boolean (логическое значение) String (строковое преобразование) Number (числовое преобразование) Object (преобразование в объекты)
true "true" 1 new Boolean(1)
false "false" 0 new Boolean(0)

Преобразование специальных значений

Специальное значение Boolean String Number Object
null false "null" 0 ошибка TypeError
undefined false "undefined" NaN ошибка typeError

Неявное преобразование JavaScript осуществляет в зависимости от операции, проводимой над данными. Если при сложении строки и числа, число преобразуется в строку автоматически, то при вычитании из числа строки результат получается совсем другой. Смотрим пример:

var a, b, c; /*Объявляем переменные a, b, c*/
a=1; /*Задаём значение переменной a*/
b="2"; /*Задаём значение переменной b*/
c=a-b; /*Вычитаем из переменной a и переменную b. Результат этой операции записываем в переменную c*/
alert (c); /*Выводим значение переменной c на экран*/

Запускаем. На экране число -1. В случае проведения операции вычитания, строка "2" преобразовалась в число. Из числа 1 вычли число 2. Получилось -1.

Явное преобразование типов данных в Javascript

Результат преобразования типов данных неявным способом не всегда будет удовлетворять нашим ожиданиям. Возьмём пример сложения двух переменных и зададим им значения "по умолчанию":

var a, b, c; /*Объявляем переменные a, b, c*/
a=prompt ("Введите переменную a", 10); /*запускаем функцию prompt для ввода данных в переменную a*/
b=prompt ("Введите переменную b", 3); /*запускаем функцию prompt для ввода данных в переменную b*/
c=a+b; /*Складываем переменные a и b. Результат этой операции записываем в переменную c*/
alert (c); /*Выводим значение переменной c на экран*/

В результате, складывали 2 числа, а в получилась конкатенация. В функцию prompt, по умолчанию, можно записать данные только строкового типа, что и было сделано. Чтобы не возникало подобных недоразумений, необходимо использовать явное преобразование типов данных, а именно приводить переменные к одинаковому типу самостоятельно.

Строковое преобразование

Стороковым преобразованием является преобразование любых типов данных в строки. Делается это при помощи метода String(), в скобках указывается переменная (значение), над которой необходимо произвести операцию. Рассмотрим пример:

var a, b, c, d, e; /*Объявляем переменные a, b, c, d, e*/
a=1; /*Задаём числовое значение переменной a*/
b=String(a); /*Приводим переменную a к строковому типу и записываем значение в переменную b*/
c=2; /*Задаём числовое значение переменной c*/
d=(a+c); /*Складываем переменные a и c. Результат записываем в переменную d*/
e=(b+c); /*Складываем переменные b и c. Результат записываем в переменную e*/
alert("число 1 + число 2 = "+d); /*Выводим сообщение число 1+ число 2 = и значение переменной d на экран*/
alert("строка 1 + строка 2 = "+e); /*Выводим сообщение строка 1 + строка 2= и значение переменной e на экран*/

Запускаем. На экране по порядку выскакивают 2 окна, первое: "число 1 + число 2 = 3". В это случае переменным a и b задано числовое значение. В результате сложения двух чисел, получается число. Во втором окне сообщение: "строка 1 + строка 2 = 12". Здесь одну из складываемых переменных мы привели к строковому типу. В результате сложения строки с числом JavaScript неявным способом преобразовал все элементы данный операции в строки.

Числовое преобразование

Числовым преобразованием является преобразование любых типов данных в числа. Делается это при помощи метода Number(), в скобках указывается переменная (значение), над которой необходимо произвести операцию. Происходит преобразование по следующим правилам:

Для строк:

Для логических значений:

Для специальных значений:

Аналогом метода Number(), является поставленный перед преобразуемым значением +. Number("5") и +"5" - одно и то же.

Логическое преобразование

Все типы данных преобразуются в логические значения при помощи метода Boolen(), в скобках указывается переменная (значение), подвергаемая преобразованию. Все значения, являющиеся "пустыми" представляются как false их немного:

  1. Пустая строка;
  2. 0;
  3. null;
  4. undefined;
  5. NaN;

Всё остальное представляется как true.

Преобразование простых типов в объекты

Простые типы данных преобразуются в объекты при помощи методов String(), Number() и Boolean():

var a, b, c; /*Объявляем переменные a, b, c*/
a=new String("1"); /*Создаём из переменной a объект строкового типа a*/
b=new Number(1); /*Создаём из переменной b числовой объект b*/
c=new Bolean(true); /*Создаём из переменной c объект логического типа с*/

Преобразование объектов в простые типы данных

В простые типы объекты преобразуются при помощи методов toString() и valueOf. При помощи toString() возвращается представление объекта в виде строки "[object Object]":

({x:1}).toString()

Метод valueOf возвращает простое значение объекта, если таковое имеется:

({x:2}).valueOf()

Преобразование объектов тема достаточно большая, чтобы затрагивать её в этой статье. Вернёмся к ней в дальнейшем, когда будем работать непосредственно с объектами.

24.05.2018


<<Предыдущая | В раздел | Следующая>>