1. What is the difference between == and === in JavaScript?
Double equals performs loose equality with type coercion. It converts values to the same type before comparing. This causes unexpected results. Triple equals performs strict equality without type coercion. It compares both value and type. If types are different, it returns false immediately. Simple rule: Double equals is lenient, like a relaxed teacher. Triple equals is strict, like a strict teacher. Always use triple equals unless you have a specific reason not to. Real world analogy: Comparing a 5 dollar bill and a 5 euro note. Double equals says equal because both are 5. Triple equals says not equal because one is dollars and one is euros. Best practice: Always use triple equals. Most companies enforce this in coding standards.
// == (loose equality with type coercion)
console.log(5 == '5'); // true (string converted to number)
console.log(true == 1); // true (boolean converted to number)
console.log(false == 0); // true
console.log(null == undefined); // true (special case)
console.log('' == 0); // true (empty string to 0)
// === (strict equality without coercion)
console.log(5 === '5'); // false (different types)
console.log(true === 1); // false (different types)
console.log(false === 0); // false (different types)
console.log(null === undefined); // false (different types)
console.log('' === 0); // false (different types)
// Dangerous examples with ==
console.log(0 == false); // true (confusing!)
console.log('' == false); // true (confusing!)
console.log([] == false); // true (very confusing!)
// Safe with ===
console.log(0 === false); // false (clear!)
console.log('' === false); // false (clear!)
console.log([] === false); // false (clear!)