Преобразование типов
JavaScript простым языком

Очень часто при разработке возникает ситуация, когда нужно преобразовать типы. Ты столкнешься с этим на практике, даже не думай об обратном.
Преобразование к String (строковый тип)
Представим, нам нужно преобразовать переменную возраста, которая имеет тип Number
(числовой) в новую переменную типа String
.
let ageNumber = 19;
let ageString = ???;
Как же мы будем это делать? Приведу в пример несколько способов:
let ageNumber = 19;
let ageString = ageNumber + ''; // Вариант 1: так делал мой
// прадед
let ageString = `${ageNumber}`; // Вариант 2: так уже чуть
// лучше, чем делал мой дед
let ageString = String(ageNumber); // Вариант 3: вот так гораздо
// лучше, если будешь делать так
Как видишь, ничего сложного. Сделав одним из способов, ты почти на 100% будешь уверен, что все точно преобразовалось в строку. Почему почти? Потому как такое отлично сработает, если ты работаешь с примитивными типами данных: Number
, String
(да, сам String
можно привести в String
), Boolean
, null
и даже undefined
. Но, такое преобразование не прокатит с объектами
. Но об объектах мы всецело будем говорить чуть позже, так как еще к ним недостаточно подготовились.
Важно отметить, что при сложении переменных, если хотя бы одна из них имеет строковый тип, может произойти неприятная неожиданность:
let a = '1';
let b = 2;
let c = a + b; // получим значение: '12'
Оператор +
, в данном случае может сыграть злую шутку. Он просто-напросто склеит значения переменных в одну строку. И, кстати, неважно в каком порядке мы будем складывать a + b
или b + a
.
Преобразование к Number (числовой тип)
Преобразовывать к числовому типу немного повеселее, так как в этом случае уже не все так просто и могут кое-где приключиться интересные истории.
Ради примера, представим обратную ситуацию:
let ageString = '19';
Теперь наша начальная переменная имеет тип String
.
Приступим к преобразованию:
let ageString = '19';
let ageNumber = Number(ageString); //(1)
let ageNumber = + ageString; // (2)
let ageNumber = ageString / 1; // (3)
let ageNumber = ageString * 1; // (4);
Итак, в пример я привел 4 варианта. Рассмотрим каждый из них:
Первый вариант называется явным преобразованием типа. Функция
Number
попробует преобразовать переданный в нее аргумент в строку. При этом, если вокруг цифр будут стоять пробелы, то они обрежутся и это не будет ошибкой. А вот если в строке будут содержаться какие-либо символы, кроме цифр, то в переменную запишется значениеNaN
(Not-A-Number). Если же строка была пустая, то в переменную запишется значение –0
.Второй вариант очень часто встречается в коде разработчиков. Это является неким лайфхаком. В данном случае, оператор
+
полностью заменяет вызов функцииNumber
, т.к. их поведение полностью совпадает.Третий и четвертый варианты – как делать
можно, но не нужно. Примеры привел для того, чтобы показать, чтоумножение
иделение
так же заставляет переменные приходить к типу Number.
Есть некоторые особенности, которые важно запомнить при вызове функции Number
:
Number(undefined); // получим значение: NaN
Number(null); // получим значение: 0
Number(true); // получим значение: 1
Number(false); // получим значение: 0
Преобразование к Boolean (логический тип)
Преобразование к логическому значению по сравнению с первыми двумя, пожалуй, самая простая операция.
Boolean(1); // получим значение: true
Boolean('строка'); // получим значение: true
Boolean(0); // получим значение: false
Boolean(null); // получим значение: false
Boolean(undefined); // получим значение: false
Boolean(NaN); // получим значение:false
Boolean(''); // получим значение: false
Если коротко, то все, что имеет какое-то значение, после преобразования будет иметь значение true
, а все остальное – false
.
Last updated
Was this helpful?