intermediate
Coercion and equality
Implicit conversion, truthiness, == versus ===, Object.is, and comparison edge cases.
Coercion converts values implicitly (`==`) or explicitly (`Number(x)`, `String(x)`). Truthiness drives `if (value)` but is dangerous for validation — empty arrays and objects are truthy.
Prefer `===` to avoid implicit conversion. `Object.is` matches NaN and distinguishes -0 from +0.
console.log([] == false); // true
console.log([] === false); // false
console.log(Object.is(NaN, NaN)); // true
Interview pattern: predict output, explain the coercion path, then recommend explicit parsing at system boundaries (forms, APIs, query params).
Common pitfalls include mixing similar APIs and forgetting edge cases during live coding.
The trade-off is often clarity versus performance or safety versus convenience.
Checklist:
- Default to ===.
- Know truthy/falsy values.
- Use Object.is for NaN and signed zero.
- Parse explicitly at boundaries.