Знаете ли вы разницу между операторами== и === в Javascript?

Хотите верьте, хотите нет, но эти две проверки равенства на первый взгляд могут показаться идентичными, но они фундаментально различны. Каждый из них имеет свой собственный вариант использования, и понимание того, когда применять каждый из них, может существенно повлиять на написание чистого, безошибочного кода.

Основы

JavaScript предоставляет два способа проверки равенства:

  1. Свободное равенство (==): сравнивает значения на предмет равенства и выполняет приведение типов, если типы различаются.
  2. Строгое равенство (===): сравнивает значение и тип примитивов и проверяет наличие одной и той же ссылки в случае объектов.

Давайте рассмотрим каждый из них на простых примерах:

Свободное равенство (==)

Оператор == проверяет, равны ли значения с обеих сторон, и выполняет приведение типов, если типы не совпадают.

console.log('5' == 5);  // Output: true

В этом случае JavaScript преобразует строку '5' в число перед выполнением сравнения.

Строгое равенство (===)

Поведение === варьируется в зависимости от того, работаете ли вы с примитивными типами или объектами:

Примитивы

Для таких примитивов, как String, Number, Boolean, null, undefined, BigInt и Symbol, === проверяет как тип, так и значение.

Пример:

console.log('5' === 5);  // Output: false (Different types)
console.log(5 === 5);    // Output: true  (Same type and value)

Объекты

Для типов объектов (Array, Object, Function и т. д.) === проверяет, указывают ли оба операнда на один и тот же объект в памяти.

const obj1 = { x: 1, y: 2, z: 3};
const obj2 = { x: 1, y: 2, z: 3};
const obj3 = obj1;
console.log(obj1 === obj2);  // Output: false (Different references)
console.log(obj1 === obj3);  // Output: true  (Same reference)

Почему это важно?

Понимание разницы необходимо по нескольким причинам:

  1. Читабельность: код, использующий ===, часто легче понять, поскольку вам не нужно запоминать иногда причудливые правила приведения типов JavaScript.
  2. Предсказуемость: использование == может привести к неожиданным ошибкам.

Лучшие практики

Итак, когда следует использовать == и ===?

  1. Используйте === по умолчанию: это более предсказуемо и легче читается.
  2. Используйте == экономно: только если вы уверены, что приведение типов — это то, что вам нужно, и вы осведомлены о его особенностях.

Хотя это может показаться тривиальным, понимание нюансов между == и === в JavaScript важно для написания эффективного и безошибочного кода.

Равенство в Javascript:

источник: https://dorey.github.io/JavaScript-Equality-Table/unified/

TLDR: если сомневаетесь, используйте три знака равенства.

Приятного кодирования :)