Type coercion is one of JavaScript's most misunderstood features. Understanding the rules eliminates "wat" moments.
Explicit vs Implicit Coercion
// Explicit (you do it intentionally)
Number("42"); // 42
String(42); // "42"
Boolean(0); // false
// Implicit (JavaScript does it for you)
"5" * 2; // 10 (string → number)
5 + ""; // "5" (number → string)
if ("hello") {} // true (string → boolean)ToNumber Rules
Number(undefined) // NaN
Number(null) // 0 (!)
Number(true) // 1
Number(false) // 0
Number("") // 0 (!)
Number(" ") // 0 (!)
Number("42") // 42
Number("42px") // NaN
Number([]) // 0 ([] → "" → 0)
Number([1]) // 1 ([1] → "1" → 1)
Number([1, 2]) // NaN ([1,2] → "1,2" → NaN)
Number({}) // NaNToString Rules
String(null) // "null"
String(undefined) // "undefined"
String(true) // "true"
String([1, 2, 3]) // "1,2,3"
String({}) // "[object Object]"
String([]) // "" (empty string!)ToBoolean Rules (Falsy Values)
// Only these are falsy:
Boolean(false) // false
Boolean(0) // false
Boolean(-0) // false
Boolean(0n) // false (BigInt zero)
Boolean("") // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(NaN) // false
// EVERYTHING else is truthy:
Boolean("0") // true (!)
Boolean([]) // true (!)
Boolean({}) // true (!)
Boolean("false") // true (!)The + Operator
// If either operand is a string → string concatenation
"5" + 3; // "53" (number → string)
3 + "5"; // "35"
"" + 42; // "42" (quick number → string conversion)
// Otherwise → numeric addition
5 + 3; // 8
5 + null; // 5 (null → 0)
5 + true; // 6 (true → 1)
5 + undefined; // NaN (undefined → NaN)== vs === Deep Dive
// == performs type coercion
"5" == 5; // true (string → number)
null == undefined; // true (special rule!)
null == 0; // false (null only == null or undefined)
"" == false; // true ("" → 0, false → 0)
[] == false; // true ([] → "" → 0, false → 0)
// === no coercion
"5" === 5; // false
null === undefined; // falseBest Practices
- Always use
===except when intentionally checking null/undefined (x == null) - Be explicit: use
Number(),String(),Boolean()instead of implicit coercion - Know the falsy values — they come up in interviews constantly