В большинстве случаев операторы и функции автоматически преобразуют присвоенные им значения в правильный тип.

Например, 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              => 0
true and false    => 1 and 0
string            => Whitespaces from the start and end are removed.
                     If the remaining string is empty, the result 
                     is 0. Otherwise, the number is “read” from 
                     the string. An error gives NaN.

Примеры:

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)