Преобразование типов
Здравствуй-здравствуй... Заскучал? Поехали дальше =)
Очень часто при разработке возникает ситуация, когда нужно преобразовать типы. На практике ты с этим столкнешься, даже не думай об обратном.
Преобразование к 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.
P.S. Кстати, если ты задавался вопросом, почему мы еще не работает с формами, кнопочками и т.п., то не переживай, через пару статей мы накинемся на практику.