Операторы сравнения в 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, а false – boolean.
Пример 4
const str = ""
console.log(str == false) //true
console.log(str === false) //false
Значение пустой строки и false – это в JavaScript то же самое. Следовательно, == возвращает значение true. Но тип переменных отличается, поэтому === возвращает значение false.
Когда использовать ==, а когда ===?
Если есть сомнения, используйте ===. Это избавит вас от большого количества потенциальных ошибок.
Если не нужен контроль входящих данных, используйте ==. Например, если API принимает от клиента "true" и true, используйте ==.
Эта таблица показывает, насколько сложно сравнение в JavaScript.
