В чем разница между операторами == (нестрогое равенство) и === (строгое равенство) в JavaScript?

«В чем разница между операторами == (нестрогое равенство) и === (строгое равенство) в JavaScript?» — вопрос из категории JavaScript, который задают на 30% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основное отличие — в приведении типов (type coercion).

  • == (Нестрогое равенство): Сравнивает значения после их приведения к общему типу. Это может приводить к неочевидным результатам.
  • === (Строгое равенство): Сравнивает значения без приведения типов. Возвращает true только если и значения, и типы идентичны.

Примеры:

// Сравнение с приведением типов (==)
5 == '5';          // true (строка '5' преобразуется в число 5)
true == 1;         // true (булево true преобразуется в число 1)
false == 0;        // true (булево false преобразуется в число 0)
null == undefined; // true (специальное правило языка)
'' == 0;           // true (пустая строка преобразуется в 0)

// Строгое сравнение (===)
5 === '5';          // false (разные типы: number vs string)
true === 1;         // false (разные типы: boolean vs number)
null === undefined; // false (разные типы)
'' === 0;           // false (разные типы: string vs number)

Практическое правило в Node.js разработке: Всегда используйте === и !== по умолчанию. Это предотвращает скрытые ошибки, вызванные неявным приведением типов, и делает код более предсказуемым и легким для понимания. Оператор == имеет смысл использовать только в очень специфических случаях, например, для проверки value == null (что эквивалентно value === null || value === undefined), но даже тогда явная проверка на null и undefined часто читается лучше.