Преобразования данных

Последнее обновление: 12.08.2022

Нередко возникает необходимость преобразовать одни данные в другие. Некоторые преобразования javascript выполняет автоматически. Например:

const number1 = "56";
const number2 = 4;
cont result = number1 + number2;
console.log(result); // 564

Здесь константа number1 представляет строку, а точнее строковое представление числа. А константа number2 представляет число. И в итоге мы получим не число 60, а строку 564.

При сложении преобразования в JavaScript производятся по принципу:

  • Если оба операнда представляют числа, то происходит обычное арифметическое сложение

  • Если предыдущее условие не выполняется, то оба операнда преобразуются в строки и производится объединение строк.

Соответственно в примере выше, поскольку первый операнд - строка, то второй операнд - число также преобразуется в строку, и в итоге получаем строку "564", а не число 60. Фактически мы получаем:

const number1 = "56";
const number2 = 4;
const result = number1 + String(number2);
console.log(result); // 564

Выражение String(number2) позволяет получить строковое представление константы number2, то есть из числа 4 получает строку "4".

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

parseInt()

Для преобразования строки в целое число применяется функция parseInt():

const number1 = "56";
const number2 = 4;
const result = parseInt(number1) + number2;
console.log(result); // 60

При этом строка может иметь смешанное содержимое, например, "123hello", то есть в данном случае есть цифры, но есть и обычные символы. Функция parseInt() все равно попытается выполнить преобразование - она последовательно, начиная с первого символа, считывает цифры, пока не встретит первый нецифровой символ:

const num1 = "123hello";
const num2 = parseInt(num1);
console.log(num2); // 123

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

const number1 = parseInt(0.000005);   // 0;
console.log(number1);

const number2 = parseInt(0.0000005);  // 5
console.log(number2);

Выше в функцию parseInt передаются дробные числа, и мы ожидаем в обоих случаях получить число 0. Однако при преобразовании number2 мы получаем число 5. Почему?

Пример выше будет эквивалентен следующему:

const number1 = parseInt(String(0.000005));   // 0;
console.log(number1);

const number2 = parseInt(String(0.0000005));  // 5
console.log(number2);

Для дробных чисел меньше 10-6 (0.000001) применяется экспоненциональная запись, то есть число 0.0000005 представляется как 5e-7:

console.log(0.0000005);     // 5e-7

Далее число 5e-7 преобразуется в строку "5e-7", и эту строку parseInt пытается преобразовать в число. Соответственно на выходе получается число 5.

То же самое касается очень больших чисел типа 999999999999999999999, которые также представляются к экспоненциальной форме.

NaN и isNaN

Если функции parseInt() не удастся выполнить преобразование, то он возвращает значение NaN (Not a Number), которое говорит о том, что строка не представляет число и не может быть преобразована.

console.log(parseInt("abc"));	// NaN
cont type = typeof NaN;
console.log(type);				// number

Что интересно, само значение NaN (не число) представляет тип number, то есть число.

С помощью специальной функции isNaN() можно проверить, представляет ли строка число. Если строка не является числом, то функция возвращает true, если это число - то false:

const num1 = "javascript";
const num2 = "22";
let result = isNaN(num1);
console.log(result); // true - num1 не является числом
	
result = isNaN(num2);
console.log(result); //  false - num2 - это число

parseFloat

Для преобразования строк в дробные числа применяется функция parseFloat(), которая работает аналогичным образом:

const number1 = "46.07";
const number2 = "4.98";
let result = parseFloat(number1) + parseFloat(number2);
console.log(result); //51.05

Преобразование из строки в число и оператор +

Стоит отметить, что для преобразования строки в число в JavaScript мы можем использовать оператор унарного плюса + перед преобразуемым значением:

const number1 = "56";
const number2 = 4;
const result = +number1 - number2;
console.log(result); // 52

Здесь выражение +number1 преобразует строку "56" в число 56.

Если надо получить отрицательное представление числа, то аналогичным образом применяется знак унарного минуса (как перед отрицательными числами):

const number1 = "56";
const number2 = 4;
const result = -number1 - number2;  // -56 - 4 = -60
console.log(result); // -60

Однако в примерах выше строка number1 могла быть преобразована в числа. Если это не возможно, то результатом преобразования будет значение NaN:

const number1 = "56hek";
console.log(+number1); // NaN
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850