Операторы сравнения в JavaScript: тройной знак равенства и двойной знак равенства

Вы видели двойные и тройные знаки равенства в JavaScript. Но что они? Если коротко: == преобразует тип, а === не преобразует тип.

Двойной знак равенства (==) проверяет только равенство значений. Он выполняет приведение типов. Это означает, что перед проверкой значений он преобразует типы переменных, чтобы привести их в соответствие друг к другу.

Тройной знак равенства (===) не выполняет приведение типов. Он проверяет, имеют ли сравниваемые переменные одинаковое значение и тип.

Рассмотрим несколько примеров:

Пример 1

const foo = "test" 
const bar = "test"  

console.log(foo == bar) //true
console.log(foo === bar) //true                            

Значение и тип у foo и bar одинаковые. Поэтому результат для обоих - true.

Пример 2

const number = 1234 
const stringNumber = '1234'  

console.log(number == stringNumber) //true
console.log(number === stringNumber)  //false                      

Значения number и stringNumber выглядят одинаковыми. Но number имеет тип Number, а stringNumber имеет тип string. Даже если значения переменных одинаковы, тип не совпадает. Поэтому оператор == возвращает значение true. Но при проверке значения и типа значение равно false.

Пример 3

console.log(0 == false) //true
console.log(0 === false) //false   

Значение 0 при проверке с false является тем же. 0 и false имеют одинаковое значение для JavaScript. Но при проверке с помощью тройного оператора значение ложно, потому что 0 имеет тип number, а falseboolean.

Пример 4

const str = ""

console.log(str == false) //true
console.log(str === false) //false

Значение пустой строки и false – это в JavaScript то же самое. Следовательно, == возвращает значение true. Но тип переменных отличается, поэтому === возвращает значение false.

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

Если есть сомнения, используйте ===. Это избавит вас от большого количества потенциальных ошибок.

Если не нужен контроль входящих данных, используйте ==. Например, если API принимает от клиента "true" и true, используйте ==.

Эта таблица показывает,  насколько сложно сравнение в JavaScript.

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

Вадим Дворниковавтор-переводчик статьи «JavaScript Triple Equals Sign VS Double Equals Sign – Comparison Operators Explained with Examples»