В большинстве случаев операторы и функции автоматически преобразуют присвоенные им значения в правильный тип.
Например, alert
автоматически преобразует любое значение в строку, чтобы показать его. Математические операции преобразуют значения в числа.
Также бывают случаи, когда нам нужно явно преобразовать значение в ожидаемый тип.
Числовое преобразование
Числовое преобразование в математических функциях и выражениях происходит автоматически.
Например, когда деление /
применяется к нечислам:
alert( "6" / "2" ); // result, strings are converted to numbers
Явное преобразование обычно требуется, когда мы читаем значение из строкового источника, такого как текстовая форма, но ожидаем ввода числа.
Если строка не является допустимым числом, результатом такого преобразования будет NaN
. Например:
let age = Number("an arbitrary string instead of a number"); alert(age); // NaN, conversion failed
Правила преобразования чисел:
undefined => NaN null => 0true and false => 1 and 0
string => Whitespaces from the start and end are removed. If the remaining string is empty, the result is0
. Otherwise, the number is “read” from the string. An error givesNaN
.
Примеры:
alert( Number(" 123 ") ); // 123 alert( Number("123z") ); // NaN (error reading a number at "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(“hello”) ); // true alert( Boolean(“”) ); // false
Обратите внимание: строка с нулем "0"
- это true
Некоторые языки (а именно PHP) трактуют "0"
как false
. Но в JavaScript непустая строка всегда true
.
alert( Boolean("0") ); // true
alert( Boolean(" ") );
// spaces, also true (any non-empty string is true)