JavaScript Type Coercion
Type Coercion
Type coercion is the automatic conversion of values from one data type to another.
Type coercion happens when you perform an operation on different data types, and the JavaScript engine tries to make them "fit" together.
Example
JavaScript coerces types differently per operator, so type coercion can hide bugs.
Program continues according to the coercion rules, but these may differ from what the programmer wanted to achieve.
let result1 = ('5' + '2'); // = 52
let result2 = ('5' - '2'); // = 3
Try it Yourself »
Coercion is implicit (handled automatically by the engine), while type conversion is explicit (you manually use functions like Number() or String()).
Because JavaScript is weakly typed, it doesn't throw errors when types don't match; it just tries to coerce them.
String Coercion (+)
If any part of a + operation is a string, JavaScript converts everything to strings and concatenates them.
let x = "5" + 2 // x = "52"
Numeric Coercion
Other arithmetic operators (-, *, /, %) and the unary plus (+x) force values into numbers.
let x = "5" - 2 // x = 3
Boolean Coercion
Values are coerced to booleans in logical contexts like if statements or using the double-NOT operator (!!).
Falsy values: 0, "", null, undefined, NaN, and false.
Truthy values: Everything else (including empty objects {} and arrays []).
Loose Equality (==)
This operator performs coercion to find a "common type" before comparing.
let x = (5 == "5") // x = true
Best Practices to Avoid Bugs
Use === (Strict Equality): This checks both value and type without coercion, preventing weird results.
Be Explicit: Instead of relying on automatic behavior, use MDN's recommended conversion methods like Number() or String() to make your intent clear.
Watch for NaN
If a string cannot be converted to a valid number, like "abc" - 1), the result is NaN (Not-a-Number).