Сегодня я отлаживал устаревший код и в итоге обнаружил странную ошибку. Это было вызвано простым «==».
В Javascript у нас есть четыре алгоритма равенства, но мы используем в основном два: абстрактное равенство или свободное равенство (==) и строгое равенство (===).
Абстрактное равенство (==) - зло, не используйте его. Предположим, у нас есть это:
let a = "1"; let b = 1; let c = "1.0"; console.log(a); // output 1 console.log(b); // output 1 console.log(c); // output 1
Проведем несколько сравнений:
console.log(a == b); // output true console.log(b == c); // output true
Пока все хорошо, теперь давайте проверим следующее:
console.log(a == c); //
Конечно результат верный, правда? Ответ - нет. Абстрактное равенство (==) выполняет сравнение по преобразованию. Пожалуйста, больше не используйте ==. Вместо этого используйте строгое равенство (===).
console.log(a === b); // output false console.log(b === c); // output false console.log(a === c); // output false
Абстрактное равенство (==) сравнивает два значения на равенство после преобразования обоих значений в общий тип. После преобразований (одна или обе стороны могут претерпеть преобразования) окончательное сравнение равенства выполняется точно так же, как его выполняет Строгое равенство (===). (от MDN)
Строгое равенство (===) сравнивает два значения на равенство. Ни одно из значений не будет неявно преобразовано в какое-либо другое значение перед сравнением. Если значения имеют разные типы, значения считаются неравными. В противном случае, если значения имеют один и тот же тип и не являются числами, они считаются равными, если имеют одинаковое значение. Наконец, если оба значения являются числами, они считаются равными, если они оба не NaN и имеют одно и то же значение, или если одно из них равно +0, а другое --0. (от MDN)
Спасибо!