Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Преобразование типов данных
Что будет, если к числу прибавить строку?
let str = '5', x = 3;
let var1 = x + str; // Переменная содержит строку '35'
console.log(var1); // 35
console.log(typeof var1); // string
let var2 = str + x; // Переменная содержит строку '53'
console.log(var2); // 53
console.log(typeof var2); // string
В этом случае интерпретатор столкнется с несовместимостью типов данных и попытается преобразовать переменные к одному типу данных, а затем выполнить операцию. В нашем случае переменная x
, имеющая тип number
(число), будет преобразована к типу string
(строка), а затем будет произведена операция конкатенации строк.
А что будет, если из числа вычесть строку, число умножить на строку или число разделить на строку?
let str = '5', x = 15;
let var1 = x - str; // Переменная содержит число 10
console.log(var1); // 10
console.log(typeof var1); // number
let var2 = x * str; // Переменная содержит число 75
console.log(var2); // 75
console.log(typeof var2); // number
let var3 = x / str; // Переменная содержит число 3
console.log(var3); // 3
console.log(typeof var3); // number
Итак, интерпретатор попытается преобразовать строку в число, а затем вычислить выражение. Причем не важно, в какой последовательности будут указаны число и строка:
let var4 = str * x; // Переменная содержит число 75
console.log(var4); // 75
console.log(typeof var4); // number
Но что будет, если в строке будут одни буквы?
let str = 'Строка', x = 15;
let var1 = x - str; // Переменная содержит значение NaN
console.log(var1); // NaN
console.log(typeof var1); // number
В этом случае интерпретатор не сможет преобразовать строку в число и присвоит переменной значение NaN
(Not a Number, не число).
С одной стороны, хорошо, что интерпретатор делает преобразование типов данных за нас. Но с другой стороны, можно получить результат, который вовсе не планировался. По этой причине лучше оперировать переменными одного типа, а если необходимо делать преобразования типов, то делать это самим.
Для преобразования типов данных можно использовать следующие встроенные функции JavaScript:
parseInt(<Строка>[, <Основание>])
— преобразует строку в целое число. Строка считается заданной в системе счисления, указанной вторым необязательным параметром. Если основание не указано, то система счисления выбирается автоматически и зависит от префиксов в строке, например, если строка начинается с0x
, то будет использоваться основание16
. Если строка не может быть преобразована в число, возвращается значениеNaN
:
console.log( parseInt('10') ); // 10
console.log( parseInt('0xFF') ); // 255
console.log( parseInt('0xFF', 16) ); // 255
console.log( parseInt('0167', 8) ); // 119
console.log( parseInt('1110111', 2) ); // 119
console.log( parseInt('строка', 2) ); // NaN
parseFloat(<Строка>)
— преобразует строку в число с плавающей точкой:
console.log( parseFloat('5.2') ); // 5.2
console.log( parseFloat('5e-2') ); // 0.05
console.log( parseFloat('строка') ); // NaN
Для преобразования числа в строку используется метод toString([<Основание>])
:
let x = 10, y = 5.2;
console.log( x.toString() ); // 10
console.log( x.toString(8) ); // 12
console.log( y.toString() ); // 5.2
Рассмотрим пример использования преобразования типов данных. Просуммируем два числа, переданных пользователем в командной строке (листинг 3.1).
Листинг 3.1. Вычисление суммы двух чисел
const process = require('process');
// Проверяем передачу чисел в командной строке
if (process.argv.length == 4) {
let x, y, sum1, sum2, msg;
// Получаем значения из командной строки
x = process.argv[2];
y = process.argv[3];
// Вычисляем сумму чисел
sum1 = x + y;
msg = 'До преобразования типов:\n';
msg += 'Значение суммы чисел ';
msg += x + ' и ' + y + ' равно ';
msg += sum1 + '\n\n';
sum2 = parseInt(x, 10) + parseInt(y, 10);
msg += 'После преобразования типов:\n';
msg += 'Значение суммы чисел ' + x + ' и ';
msg += y + ' равно ' + sum2;
console.log(msg);
}
else {
// Если числа не переданы
console.log('Передайте 2 числа в конце команды');
}
Если мы не укажем числа после команды, то получим сообщение из блока else
:
C:\book\p1>node index.js
Передайте 2 числа в конце команды
Если указать два числа 5
, то в окне консоли отобразится следующий текст:
C:\book\p1>node index.js 5 5
До преобразования типов:
Значение суммы чисел 5 и 5 равно 55
После преобразования типов:
Значение суммы чисел 5 и 5 равно 10
Итак, данные, передаваемые в командной строке или получаемые из диалоговых окон в Web-браузере, имеют тип данных string
(строка). Чтобы получить сумму двух чисел, нужно обязательно выполнить преобразование типов, иначе мы получим еще одну строку, а не сумму.
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов