StudyCode
К практике
НачальныйJavaScriptтипыcoercion
🔄JuniorJavaScriptтипыcoercionNumberBooleanString

Преобразование типов

Явное и неявное приведение типов — когда JavaScript «помогает» и когда это опасно.

JSПреобразование типов — truthy, falsy, coercion

❌ Falsy — 7 значений

0ноль
-0минус ноль
0nBigInt ноль
""пустая строка
nullявное отсутствие
undefinedне задано
NaNNot a Number
Boolean(falsy) → false

✓ Truthy — всё остальное

"0"строка с нулём — непустая!
" "строка с пробелом
[]пустой массив
{}пустой объект
-1любое ненулевое число
Infinityбесконечность
Boolean(truthy) → true
Язык примеров:
Шаг 1 из 2
1

Явное преобразование

String() — в строку

javascript
String(42)         // "42"
String(3.14)       // "3.14"
String(true)       // "true"
String(false)      // "false"
String(null)       // "null"
String(undefined)  // "undefined"
String([1, 2, 3])  // "1,2,3"
String({})         // "[object Object]"

Number() — в число

javascript
Number("42")       // 42
Number("  42  ")   // 42  (пробелы игнорируются)
Number("42px")     // NaN (не число)
Number("")         // 0   (пустая строка!)
Number("  ")       // 0   (строка из пробелов!)
Number(true)       // 1
Number(false)      // 0
Number(null)       // 0
Number(undefined)  // NaN
Number([])         // 0   (пустой массив!)
Number([1])        // 1   (массив из одного числа!)
Number([1, 2])     // NaN

Boolean() — в булево

Правило: только 6 значений приводятся к false (falsy):

javascript
Boolean(0)          // false
Boolean(-0)         // false
Boolean(0n)         // false (bigint ноль)
Boolean("")         // false
Boolean(null)       // false
Boolean(undefined)  // false
Boolean(NaN)        // false

// Всё остальное — true (truthy):
Boolean("0")        // true  — строка "0" непустая!
Boolean(" ")        // true  — строка с пробелом!
Boolean([])         // true  — пустой массив!
Boolean({})         // true  — пустой объект!
Boolean(-1)         // true  — любое ненулевое число
JavaScript
// Ловушки преобразования типов

// "0" — truthy, 0 — falsy
if ("0") console.log("строка '0' — truthy!");  // выведет
if (0)   console.log("никогда не выведет");

// [] — truthy, но Number([]) === 0
if ([]) console.log("пустой массив — truthy!"); // выведет
console.log(Number([])); // 0

// Практика: правильная проверка «есть ли число»
function isValidAge(age) {
  // ❌ Плохо: age = 0 — валидный возраст, но falsy!
  if (!age) return false;

  // ✓ Хорошо
  if (typeof age !== "number" || isNaN(age)) return false;
  if (age < 0 || age > 150) return false;
  return true;
}

isValidAge(0);    // false (!) с первым вариантом
isValidAge(0);    // false — 0 не валидный возраст в любом случае
isValidAge(25);   // true
isValidAge(-1);   // false
isValidAge(NaN);  // false