Примус типів у JavaScript (неявний vs явний)
Що таке Примусове Перетворення Типів?
Примусове перетворення типів — це автоматичне або ручне перетворення значення з одного типу даних в інший. JavaScript є слабо типізованою мовою, тому часто виконує перетворення типів за лаштунками.
Явне Перетворення (Приведення Типів)
Коли ви навіть навмисно перетворюєте тип, використовуючи вбудовані функції:
В рядок
javascript
String(123); // "123"
String(true); // "true"
String(null); // "null"
String(undefined); // "undefined"
(123).toString(); // "123"В число
javascript
Number("123"); // 123
Number("abc"); // NaN
Number(true); // 1
Number(false); // 0
Number(null); // 0
Number(undefined); // NaN
Number(""); // 0
parseInt("42px"); // 42
parseFloat("3.14"); // 3.14
+"42"; // 42 (унарний плюс)В булевий тип
javascript
Boolean(0); // false
Boolean(""); // false
Boolean(null); // false
Boolean(undefined); // false
Boolean(NaN); // false
Boolean(1); // true
Boolean("hello"); // true
Boolean({}); // true
Boolean([]); // true
!!value; // трюк з подвоєним NOTЛожні Значення в JavaScript
Є точно 8 ложних значень:
| Значення | Тип |
|---|---|
false | Boolean |
0 | Number |
-0 | Number |
0n | BigInt |
"" | String (порожній) |
null | null |
undefined | undefined |
NaN | Number |
Все інше є істинним, включаючи [], {}, "0", "false".
Непряме Перетворення
Коли JavaScript автоматично перетворює типи під час операцій:
Конкатенація Рядків (+)
javascript
"5" + 3; // "53" (число → рядок)
"5" + true; // "5true"
"5" + null; // "5null"
"5" + {}; // "5[object Object]"Числовий Контекст (-, *, /, %)
javascript
"5" - 3; // 2 (рядок → число)
"5" * 2; // 10
"5" / "2"; // 2.5
true + 1; // 2
false + 1; // 1
null + 5; // 5 (null → 0)Порівняння з Перетворенням
javascript
"5" == 5; // true (рядок → число)
null == undefined; // true (спеціальне правило)
null == 0; // false (null дорівнює лише undefined)
"" == 0; // true
"0" == false; // true
[] == false; // trueЗагальні Пастки на Співбесідах
javascript
[] + []; // "" (порожній рядок)
[] + {}; // "[object Object]"
{} + []; // 0 (блок + унарний плюс)
true + true; // 2
"2" + "2" - "2"; // 20 ("22" - "2" = 20)
null == undefined; // true
null === undefined; // false
NaN === NaN; // falseВажливо:
Завжди використовуйте строгу рівність (===), щоб уникнути несподіваного перетворення. Коли вам потрібно перетворення типу, робіть це явно з Number(), String(), або Boolean() для ясності.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.