Знаете ли вы разницу между операторами==
и ===
в Javascript?
Хотите верьте, хотите нет, но эти две проверки равенства на первый взгляд могут показаться идентичными, но они фундаментально различны. Каждый из них имеет свой собственный вариант использования, и понимание того, когда применять каждый из них, может существенно повлиять на написание чистого, безошибочного кода.
Основы
JavaScript предоставляет два способа проверки равенства:
- Свободное равенство (
==
): сравнивает значения на предмет равенства и выполняет приведение типов, если типы различаются. - Строгое равенство (
===
): сравнивает значение и тип примитивов и проверяет наличие одной и той же ссылки в случае объектов.
Давайте рассмотрим каждый из них на простых примерах:
Свободное равенство (==
)
Оператор ==
проверяет, равны ли значения с обеих сторон, и выполняет приведение типов, если типы не совпадают.
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)
Почему это важно?
Понимание разницы необходимо по нескольким причинам:
- Читабельность: код, использующий
===
, часто легче понять, поскольку вам не нужно запоминать иногда причудливые правила приведения типов JavaScript. - Предсказуемость: использование
==
может привести к неожиданным ошибкам.
Лучшие практики
Итак, когда следует использовать ==
и ===
?
- Используйте
===
по умолчанию: это более предсказуемо и легче читается. - Используйте
==
экономно: только если вы уверены, что приведение типов — это то, что вам нужно, и вы осведомлены о его особенностях.
Хотя это может показаться тривиальным, понимание нюансов между ==
и ===
в JavaScript важно для написания эффективного и безошибочного кода.
Равенство в Javascript:
источник: https://dorey.github.io/JavaScript-Equality-Table/unified/
TLDR: если сомневаетесь, используйте три знака равенства.
Приятного кодирования :)