Пошук уроків, статей та іншого контенту
Явне й неявне приведення типів, таблиця truthy/falsy значень та чому це джерело багів.
Явне (визначене вами) приведення — найбезпечніший спосіб змінити тип значення:
Number("42"); // 42
String(42); // "42"
Boolean(0); // false
Number("abc"); // NaN — рядок неможливо перетворити на числоJavaScript намагається автоматично привести типи в багатьох операціях, і це не завжди інтуїтивно:
"5" + 3; // "53" — конкатенація, число стає рядком
"5" - 3; // 2 — мінус працює лише з числами, рядок приводиться до числа
"5" * "2"; // 10 — те саме для множення
[] + []; // "" — обидва масиви приводяться до порожніх рядків
[] + {}; // "[object Object]"Лише оператор + поводиться інакше з рядками (конкатенація). Усі інші арифметичні оператори (-, *, /) завжди намагаються привести операнди до чисел.
У логічному контексті (if, ||, !!) ці значення завжди поводяться як false:
Boolean(false); // false
Boolean(0); // false
Boolean(-0); // false
Boolean(0n); // false — BigInt нуль
Boolean(""); // false
Boolean(null); // false
Boolean(undefined); // false
Boolean(NaN); // falseАбсолютно все інше — truthy, включно з "0" (непорожній рядок), [] (порожній масив) і {} (порожній об'єкт):
if ([]) {
console.log("масив truthy, навіть порожній!");
}!!"hello"; // true
!!""; // false
!!0; // falseОчікування, що порожній масив або об'єкт — falsy (насправді вони завжди truthy).
Порівняння з NaN через === замість Number.isNaN().
Плутанина між '5' - 3 (приведення до числа) і '5' + 3 (конкатенація).
Явне приведення (Number(), String(), Boolean()) — передбачуване й безпечне. Неявне приведення трапляється автоматично в багатьох операціях і не завжди інтуїтивне — особливо для +. Falsy-значень рівно сім, усе інше truthy, включно з порожніми масивами й об'єктами — це найчастіше джерело помилок для тих, хто очікує іншої поведінки від інших мов програмування.
Спробуйте самостійно
Не запускаючи код, запишіть на папері результат кожного виразу: "10" + 5, "10" - 5, Boolean("0"), Boolean([]). Потім перевірте себе в консолі.