Что означают двойные и тройные знаки равенства или операторы сравнения в js (JavaScript)? Если говорить кратко, то свободное равенство (double equals) == по своей сути преобразует тип сущности (type), а строгое равенство (triple equals) === нет.
Первый оператор осуществляют проверку только равенства значений. Перед проверкой значений он преобразует типы переменных так, чтобы они соответствовали друг другу. А второй — не выполняет приведение к типу. Он просто осуществляет проверку, имеют ли сравниваемые переменные аналогичное значение и один и тот же тип.
Давайте рассмотрим разницу между ними на основе нескольких примеров, чтобы лучше понять их отличия.
const foo = 'test'
const bar = 'test'
console.log(foo == bar) // true
console.log(foo === bar) // true
Значение и тип обоих foo и bar равны. Следовательно, результат будет true для обоих.
const number = 1234
const stringNumber = '1234'
console.log(number == stringNumber) // true
console.log(number === stringNumber) // false
Значение number и stringNumber в этом выглядит аналогично. Однако типом number является числом (Number), а stringNumber — строка (string). Несмотря на то, что переменные имеют одинаковые значения, они отличаются по типу. Следовательно, проверка посредством оператора == выдаст true, но при проверке значения и типа она вернёт false. Причина этого кроется в одинаковом значении, но разном типе данных.
Стоит отметить следующий интересный факт о том, как функционируют операторы сравнения в js. Если сравнить 0 с false, то они будут равны. Это связано с тем, что значение 0 и false одинаковое в JavaScript, но при проверке ещё и типа результат будет противоположный. Всё просто, 0 является числом, а false имеет тип boolean.
console.log(0 == false) // true
console.log(0 === false) // false
Сравнение пустой строки и false в JavaScript через == вернёт true. Но при строгом равенстве будет false.
const str = ''
console.log(str == false) // true
console.log(str === false) // false
Читайте также: Как сравнить два массива в JS (JavaScript).
Когда и какие операторы сравнения в js следует использовать
Если сомневаетесь, как правильно использовать операторы сравнения в js, то делайте выбор в пользу ===. Это избавит от массы потенциальных ошибок.
Когда ситуация позволяет быть немного снисходительным к типу данных, то можно применять ==. Так, если API принимает от клиента оба параметра ‘true’ и true, достаточно воспользоваться ==. В целом, не стоит применять == только в случае отсутствия необходимости сравнения типа данных.
Ниже представлен удобная таблица истинности в JavaScript, которая демонстрирует, насколько сложно определять равенство в этом языке программирования.
Свободное равенство:
Строгое равенство:
Кроссбраузерность
Как свободное, так и строгое равенство свободно воспринимается всеми браузерами без каких-либо проблем.