- Преобразование типов в JS
- Неявное преобразование в JavaScript
- Неявное преобразование в строку (String)
- Неявное преобразование в число (Number)
- Неявное преобразование нечисловой строки в NaN
- Неявное преобразование логического значения в число (Number)
- Неявное преобразование значения null в число (Number)
- Значение undefined с числами, логическими значениями и null
- Явное преобразование JavaScript
- Явное преобразование в число (Number)
- Явное преобразование в строку (String)
- Явное преобразование в логический тип (Boolean)
- Преобразование типов в таблице
- Преобразование типов
- Строковое преобразование
- Численное преобразование
- Логическое преобразование
- Итого
Преобразование типов в JS
Приведение типов — это процесс преобразования данных одного типа в другой. Например, преобразование строковых данных в числовые.
В JavaScript существует два типа приведения типов:
- Неявное преобразование — происходит автоматически.
- Явное преобразование — нужно делать вручную.
Неявное преобразование в JavaScript
JavaScript умеет автоматически преобразовать один тип данных в другой — это неявное преобразование.
Неявное преобразование в строку (String)
// когда строка используется с оператором +, // оба операнда автоматически преобразовываются в строковый тип let result; result = '3' + 2; console.log(result) // "32" result = '3' + true; console.log(result); // "3true" result = '3' + undefined; console.log(result); // "3undefined" result = '3' + null; console.log(result); // "3null"
Примечание. Обратите внимание, что когда число добавляется к строке, JavaScript преобразует число в строку перед конкатенацией.
Неявное преобразование в число (Number)
// когда строки используются с операторами - , / , * // оба операнда автоматически преобразовываются в числовой тип let result; result = '4' - '2'; console.log(result); // 2 result = '4' - 2; console.log(result); // 2 result = '4' * 2; console.log(result); // 8 result = '4' / 2; console.log(result); // 2
Неявное преобразование нечисловой строки в NaN
// когда строки, которые нельзя преобразовать в число, // используются с операторами - , / , * // они преобразовываются в тип NaN let result; result = 'привет' - 'мир'; console.log(result); // NaN result = '4' - 'привет'; console.log(result); // NaN
Неявное преобразование логического значения в число (Number)
// при преобразовании логического значения // true преобразуется в 1, false в 0 let result; result = '4' - true; console.log(result); // 3 result = 4 + true; console.log(result); // 5 result = 4 + false; console.log(result); // 4
Примечание. JavaScript считает 0 как false , а все ненулевые числа как true . И если true преобразуется в число, результатом всегда будет 1.
Неявное преобразование значения null в число (Number)
// null преобразуется 0, когда используется с числами let result; result = 4 + null; console.log(result); // 4 result = 4 - null; console.log(result); // 4
Значение undefined с числами, логическими значениями и null
// при использовании математических операций с undefined // и числами, логическими значениями или значением null, // возвращается NaN let result; result = 4 + undefined; console.log(result); // NaN result = 4 - undefined; console.log(result); // NaN result = true + undefined; console.log(result); // NaN result = null + undefined; console.log(result); // NaN
Явное преобразование JavaScript
Преобразовать один тип данных в другой так, как вам нужно, можно и вручную. Тогда это будет называться явным преобразованием.
Явное преобразование в число (Number)
Для преобразования числовых строк и булевых значений в числа используют метод Number() .
let result; // строка → число result = Number('324'); console.log(result); // 324 result = Number('324e-1') console.log(result); // 32.4 // логическое значение → число result = Number(true); console.log(result); // 1 result = Number(false); console.log(result); // 0
Пустая строка или null при преобразовании вернет 0.
let result; result = Number(null); console.log(result); // 0 let result = Number(' ') console.log(result); // 0
Если строку нельзя преобразовать в число, результатом явного преобразования будет NaN.
let result; result = Number("привет"); console.log(result); // NaN result = Number(undefined); console.log(result); // NaN result = Number(NaN); console.log(result); // NaN
Числа также можно получать из строк используя функции parseInt() , parseFloat() , унарный оператор + и Math.floor() .
let result; result = parseInt("20.01"); console.log(result); // 20 result = parseFloat("20.01"); console.log(result); // 20.01 result = +"20.01"; console.log(result); // 20.01 result = Math.floor("20.01"); console.log(result); // 20
Явное преобразование в строку (String)
Чтобы преобразовать другие типы данных в строки используют либо String() , либо toString() .
// число → строка let result; result = String(324); console.log(result); // "324" result = String(2 + 4); console.log(result); // "6" // другие типы данных → строка result = String(null); console.log(result); // "null" result = String(undefined); console.log(result); // "undefined" result = String(NaN); console.log(result); // "NaN" result = String(true); console.log(result); // "true" result = String(false); console.log(result); // "false" // использование toString() result = (324).toString(); console.log(result); // "324" result = true.toString(); console.log(result); // "true"
Примечание. String() преобразовывает null и undefined в строку. toString() при попытке преобразовать null выдаст ошибку.
Явное преобразование в логический тип (Boolean)
Для преобразования числовых строк и булевых значений в числа можно использовать метод Boolean .
Значения undefined , null , 0 , NaN , » преобразуются в false .
let result; result = Boolean(''); console.log(result); // false result = Boolean(0); console.log(result); // false result = Boolean(undefined); console.log(result); // false result = Boolean(null); console.log(result); // false result = Boolean(NaN); console.log(result); // false
Все остальные значения — в true .
result = Boolean(324); console.log(result); // true result = Boolean("привет"); console.log(result); // true result = Boolean(' '); console.log(result); // true
Преобразование типов в таблице
Вот шпаргалка по преобразованиям типов в типы String, Number и Boolean.
Значение | → String | → Number | → Boolean |
1 | «1» | 1 | true |
0 | «0» | 0 | false |
«1» | «1» | 1 | true |
«0» | «0» | 0 | true |
«десять» | «десять» | NaN | true |
true | «true» | 1 | true |
false | «false» | 0 | false |
null | «null» | 0 | false |
undefined | «undefined» | NaN | false |
» | «» | 0 | false |
‘ ‘ | » « | 0 | true |
СodeСhick.io — простой и эффективный способ изучения программирования.
2023 © ООО «Алгоритмы и практика»
Преобразование типов
Чаще всего операторы и функции автоматически приводят переданные им значения к нужному типу.
Например, alert автоматически преобразует любое значение к строке. Математические операторы преобразуют значения к числам.
Есть также случаи, когда нам нужно явно преобразовать значение в ожидаемый тип.
В этой главе мы не касаемся объектов. Сначала мы разберём преобразование примитивных значений.
Мы разберём преобразование объектов позже, в главе Преобразование объектов в примитивы.
Строковое преобразование
Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.
Например, alert(value) преобразует значение к строке.
Также мы можем использовать функцию String(value) , чтобы преобразовать значение к строке:
let value = true; alert(typeof value); // boolean value = String(value); // теперь value это строка "true" alert(typeof value); // string
Преобразование происходит очевидным образом. false становится «false» , null становится «null» и т.п.
Численное преобразование
Численное преобразование происходит в математических функциях и выражениях.
Например, когда операция деления / применяется не к числу:
alert( "6" / "2" ); // 3, строки преобразуются в числа
Мы можем использовать функцию Number(value) , чтобы явно преобразовать value к числу:
let str = "123"; alert(typeof str); // string let num = Number(str); // становится числом 123 alert(typeof num); // number
Явное преобразование часто применяется, когда мы ожидаем получить число из строкового контекста, например из текстовых полей форм.
Если строка не может быть явно приведена к числу, то результатом преобразования будет NaN . Например:
let age = Number("Любая строка вместо числа"); alert(age); // NaN, преобразование не удалось
Правила численного преобразования:
Значение | Преобразуется в… |
---|---|
undefined | NaN |
null | 0 |
true / false | 1 / 0 |
string | Пробельные символы (пробелы, знаки табуляции \t , знаки новой строки \n и т. п.) по краям обрезаются. Далее, если остаётся пустая строка, то получаем 0 , иначе из непустой строки «считывается» число. При ошибке результат NaN . |
alert( Number(" 123 ") ); // 123 alert( Number("123z") ); // NaN (ошибка чтения числа на месте символа "z") alert( Number(true) ); // 1 alert( Number(false) ); // 0
Учтите, что null и undefined ведут себя по-разному. Так, null становится нулём, тогда как undefined приводится к NaN .
Большинство математических операторов также производит данное преобразование, как мы увидим в следующей главе.
Логическое преобразование
Логическое преобразование самое простое.
Происходит в логических операциях (позже мы познакомимся с условными проверками и подобными конструкциями), но также может быть выполнено явно с помощью функции Boolean(value) .
- Значения, которые интуитивно «пустые», вроде 0 , пустой строки, null , undefined и NaN , становятся false .
- Все остальные значения становятся true .
alert( Boolean(1) ); // true alert( Boolean(0) ); // false alert( Boolean("Привет!") ); // true alert( Boolean("") ); // false
Некоторые языки (к примеру, PHP) воспринимают строку «0» как false . Но в JavaScript, если строка не пустая, то она всегда true .
alert( Boolean("0") ); // true alert( Boolean(" ") ); // пробел это тоже true (любая непустая строка это true)
Итого
Существует 3 наиболее широко используемых преобразования: строковое, численное и логическое.
Строковое – Происходит, когда нам нужно что-то вывести. Может быть вызвано с помощью String(value) . Для примитивных значений работает очевидным образом.
Численное – Происходит в математических операциях. Может быть вызвано с помощью Number(value) .
Преобразование подчиняется правилам:
Значение | Становится… |
---|---|
undefined | NaN |
null | 0 |
true / false | 1 / 0 |
string | Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то получаем 0 , иначе из непустой строки «считывается» число. При ошибке результат NaN . |
Логическое – Происходит в логических операциях. Может быть вызвано с помощью Boolean(value) .
Значение | Становится… |
---|---|
0 , null , undefined , NaN , «» | false |
любое другое значение | true |
Большую часть из этих правил легко понять и запомнить. Особые случаи, в которых часто допускаются ошибки:
- undefined при численном преобразовании становится NaN , не 0 .
- «0» и строки из одних пробелов типа » » при логическом преобразовании всегда true .
В этой главе мы не говорили об объектах. Мы вернёмся к ним позже, в главе Преобразование объектов в примитивы, посвящённой только объектам, сразу после того, как узнаем больше про основы JavaScript.