Ответ
Оператор строгого равенства (===) сравнивает два значения, не выполняя приведение типов (type coercion). Он возвращает true только если операнды идентичны и по типу, и по значению.
Сравнение с нестрогим равенством (==):
// Нестрогое равенство (==) ПРИВОДИТ ТИПЫ перед сравнением:
console.log(5 == '5'); // true (строка '5' преобразуется в число 5)
console.log(null == undefined); // true (специальное правило)
console.log(0 == false); // true (false преобразуется в число 0)
// Строгое равенство (===) НЕ ПРИВОДИТ ТИПЫ:
console.log(5 === '5'); // false (Number !== String)
console.log(null === undefined); // false (Null !== Undefined)
console.log(0 === false); // false (Number !== Boolean)
console.log(5 === 5); // true (одинаковые тип и значение)
Почему === является best practice?
- Предсказуемость: Поведение кода становится более явным и менее подверженным скрытым ошибкам из-за неочевидных преобразований.
- Безопасность: Исключает сценарии, когда, например,
0 == falseили пустая строка'' == falseмогут привести к логическим ошибкам в условиях. - Производительность: Незначительно, но быстрее, так как не требует дополнительного шага приведения типов.
В подавляющем большинстве случаев в современном JavaScript (и, соответственно, в Node.js) следует использовать строгое равенство === и строгое неравенство !==.