Как вы, наверное, знаете, JavaScript — это язык программирования с динамической типизацией, что означает, что переменные могут изменять свои типы во время выполнения, и это может быть источником ошибок, если вы не понимаете, почему это происходит.
Операторы и функции автоматически преобразуют переданные им значения в нужный тип. Например, когда мы используем alert(), все значения будут преобразованы в строку.
Разберем каждый из наиболее возможных из них, которые вы можете встретить в коде:
Преобразование логического типа
Логическое преобразование является самым простым.
0
,NaN
,undefined
,null
,""
превращаются вfalse
- все остальное, включая предметы,
true
alert( Boolean("hello world") ); // true alert( Boolean(0) ); // false alert( Boolean(1) ); // true alert( Boolean("") ); // false
Преобразование числового типа
Числовое преобразование происходит в математических функциях и выражениях автоматически.
undefined
становитсяNaN.
null
становится0.
true
становится1
иfalse
становится0.
string,
строка читается «как есть», пробелы с обеих сторон игнорируются. Пустая строка становится0
. Ошибка выдаетNaN
.
1 * "
123z" // NaN 8 / "2" // 4 3 - "2" // 1 8 + "4" // "84", + operator
converts all to string and concatenate them if one operand is string.
Преобразование типа строки
Преобразование строк происходит, когда нам нужна строковая форма значения.
alert(3) // 3 becomes "3"
alert(true) // true becomes "true"
alert(null) // null becomes "null"
Как видите, преобразование строк происходит, как и следовало ожидать, очевидным образом.
Преобразование объектов
JS автоматически выполняет преобразование объекта в строку, когда мы пытаемся распечатать такой объект, как console.log(obj)
. Точно так же преобразования объекта в число выполняются автоматически, когда мы пытаемся добавить или вычесть объекты или применить математические функции.
let date1 = new Date(2021, 5, 1); console.log(date1); // Equivalent to toDateString() : 2021-06-01T05:00:00.000Z let date2 = new Date(2030, 5, 1); let time = date2 - date1; console.log(time) // Equivalent to valueOf: 283996800000
Я надеюсь, что этот пост может быть полезен, и не забывайте комментировать, если у вас есть вопросы, или связаться со мной в Твиттере. Пока :)
В сериале.
П.Д.: Если вы нашли этот пост полезным, подумайте о том, чтобы поддержать меня, купив одну из этих книг или одну из JS Starter для вашего нового проекта. Спасибо заранее :)