К практике
НачальныйJavaScriptтипыcoercion
🔄JuniorJavaScriptтипыcoercionNumberBooleanString
Преобразование типов
Явное и неявное приведение типов — когда JavaScript «помогает» и когда это опасно.
JSПреобразование типов — truthy, falsy, coercion
❌ Falsy — 7 значений
0ноль-0минус ноль0nBigInt ноль""пустая строкаnullявное отсутствиеundefinedне заданоNaNNot a NumberBoolean(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]) // NaNBoolean() — в булево
Правило: только 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