JavaScript - Преобразования типов
Здравствуйте, будущие разработчики JavaScript! Сегодня мы окунемся в fascинирующий мир преобразований типов в JavaScript. Не волнуйтесь, если вы новички в программировании; я буду вести вас по этому пути шаг за шагом, как я делал это для countless студентов на протяжении многих лет моего преподавания. Так что возьмите杯 кофе (или ваш любимый напиток) и давайте начнем!
Преобразования типов в JavaScript
Прежде чем мы углубимся в детали, давайте поймем, что такое преобразование типов. Представьте, что у вас есть коробка с Lego, но некоторые детали сделаны из дерева. Чтобы построить ваш замок Lego, вам нужно преобразовать эти деревянные детали в Lego кирпичи. Это Essentially то, что такое преобразование типов в JavaScript - изменение данных с одного типа на другой.
В JavaScript у нас есть два основных типа преобразований:
- Неявное преобразование (также называемое типовой коercией)
- Явное преобразование (также называемое типовым преобразованием)
Давайте рассмотрим каждый из них подробнее.
Неявное преобразование типов
Неявное преобразование происходит автоматически, когда JavaScript пытается выполнить операцию с значениями разных типов. Это похоже на то, как JavaScript говорит: "Не волнуйтесь, я справлюсь!" и преобразует типы за кулисами.
Преобразование в строку (Неявное преобразование)
JavaScript довольно友好, когда дело доходит до преобразования вещей в строки. Это как тот друг, который может завязать разговор с кем угодно!
let num = 5;
let str = "The number is: " + num;
console.log(str); // Вывод: "The number is: 5"
console.log(typeof str); // Вывод: "string"
В этом примере JavaScript автоматически преобразовал число 5
в строку, когда мы использовали оператор +
с строкой. Это похоже на то, как JavaScript поставил кавычки вокруг числа для нас.
Преобразование в число (Неявное преобразование)
Когда дело доходит до чисел, JavaScript старается сделать все, чтобы это имело смысл, как будто учитель математики расшифровывает неряшливый почерк студента.
let str = "10";
let num = str - 5;
console.log(num); // Вывод: 5
console.log(typeof num); // Вывод: "number"
Здесь JavaScript увидел оператор -
и подумал: "Ага! Мы должны делать математику!" Так что он преобразовал строку "10" в число 10 перед вычитанием 5.
Преобразование в булево значение (Неявное преобразование)
JavaScript имеет простое правило для преобразования в булевы значения: некоторые значения считаются "истинными" (truthy), а другие "ложными" (falsy). Это похоже на то, как студенты делятся на "присутствующие" и "отсутствующие".
if ("Hello") {
console.log("This will run because 'Hello' is truthy");
}
if (0) {
console.log("This won't run because 0 is falsy");
}
В этих примерах JavaScript неявно преобразует "Hello" в true
и 0 в false
.
Преобразование null
в число (Неявное преобразование)
Null
- это сложный случай. При преобразовании в число он становится 0. Это похоже на того студента, который не сдал домашнее задание, но все равно получил ноль баллов.
let x = null;
console.log(+x); // Вывод: 0
Унарный оператор +
пытается преобразовать null
в число, что结果是 0.
Undefined
с числом и булевым значением (Неявное преобразование)
Undefined
еще сложнее. Это как тот студент, который не только не сдал домашнее задание, но и не был даже в списке класса!
let x;
console.log(+x); // Вывод: NaN (Не число)
console.log(Boolean(x)); // Вывод: false
При преобразовании в число undefined
становится NaN
. При преобразовании в булево значение он становится false
.
Явное преобразование типов
Явное преобразование occurs, когда мы, программисты, берем под контроль и говорим JavaScript exactly какой тип мы хотим. Это как быть режиссером спектакля и говорить актерам precisely какие роли они должны играть.
Преобразование в строку (Явное преобразование)
У нас есть несколько методов для преобразования в строку:
let num = 123;
let str1 = String(num);
let str2 = num.toString();
let str3 = num + "";
console.log(str1, typeof str1); // Вывод: "123" string
console.log(str2, typeof str2); // Вывод: "123" string
console.log(str3, typeof str3); // Вывод: "123" string
Все эти методы достигают того же результата, но String()
и toString()
более explicit о наших намерениях.
Преобразование в число (Явное преобразование)
Для преобразования в число у нас есть аналогичные варианты:
let str = "456";
let num1 = Number(str);
let num2 = parseInt(str);
let num3 = +str;
console.log(num1, typeof num1); // Вывод: 456 number
console.log(num2, typeof num2); // Вывод: 456 number
console.log(num3, typeof num3); // Вывод: 456 number
Number()
и parseInt()
clearer о том, что мы пытаемся сделать, в то время как унарный +
- это сокращение, которое некоторые разработчики используют.
Преобразование в булево значение (Явное преобразование)
Преобразование в булево значение很简单:
let str = "Hello";
let bool1 = Boolean(str);
let bool2 = !!str;
console.log(bool1, typeof bool1); // Вывод: true boolean
console.log(bool2, typeof bool2); // Вывод: true boolean
Функция Boolean()
clear и читаема. Двойное отрицание (!!
) - это сокращение, которое некоторые разработчики используют, но оно может быть запутанным для новичков.
Преобразование даты в строку/число
Даты - это особый случай в JavaScript. Их можно преобразовать как в строки, так и в числа:
let date = new Date();
let dateString = String(date);
let dateNumber = Number(date);
console.log(dateString); // Вывод: "Mon May 15 2023 12:34:56 GMT+0000 (Coordinated Universal Time)"
console.log(dateNumber); // Вывод: 1684154096000 (миллисекунды с 1 января 1970 года)
Преобразование даты в строку gives us a human-readable format, а преобразование в число gives us the milliseconds since the Unix epoch.
Таблица преобразований в JavaScript
Чтобы резюмировать все методы преобразования, которые мы изучили, вот удобная таблица:
Исходное значение | в строку | в число | в булево значение |
---|---|---|---|
false | "false" | 0 | false |
true | "true" | 1 | true |
0 | "0" | 0 | false |
1 | "1" | 1 | true |
"0" | "0" | 0 | true |
"1" | "1" | 1 | true |
NaN | "NaN" | NaN | false |
Infinity | "Infinity" | Infinity | true |
-Infinity | "-Infinity" | -Infinity | true |
"" | "" | 0 | false |
"20" | "20" | 20 | true |
[ ] | "" | 0 | true |
[20] | "20" | 20 | true |
[10,20] | "10,20" | NaN | true |
["twenty"] | "twenty" | NaN | true |
["ten","twenty"] | "ten,twenty" | NaN | true |
function(){} | "function(){}" | NaN | true |
{ } | "[object Object]" | NaN | true |
null | "null" | 0 | false |
undefined | "undefined" | NaN | false |
И вот мы и прошли через страну преобразований типов в JavaScript. Помните, что практика делает perfect, так что не бойтесь экспериментировать с этими концепциями. Кто знает? Вы даже можете обнаружить, что вам нравится процесс превращения Lego кирпичей в деревянные блоки и обратно!
Счастливого кодирования, будущие мастера JavaScript!
Credits: Image by storyset