Введение
Чаще всего операторы и функции автоматически приводят переданные им значения к нужному типу.
Например, #alert автоматически преобразует любое значение к строке. Математические операторы преобразуют значения к числам. Есть также случаи, когда нам нужно явно преобразовать значение в ожидаемый тип. Пока что мы не говорим об объектах
Мы разберём преобразование объектов позже, в главе 0033 Преобразование объектов в примитивы
Строковое преобразование
Строковое преобразование происходит, когда требуется представление чего-либо в виде строки. Например, 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`
Заметим, что строчка с нулём "0"
— это true
Некоторые языки (к примеру, 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
.