Работы по JavaScript. JavaScript с Ильей Кантором
![]()
|
Сравнение разных типовПри сравнении значения преобразуются к числам. Исключение: когда оба значения — строки, тогда не преобразуются. Например: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
Тема преобразований типов будет продолжена далее, в главе Преобразование объектов: toString и valueOf. Строгое равенствоОбычное равенство не может отличить 0 от false: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
Что же делать, если все же нужно отличить 0 от false? Для проверки равенства без преобразования типов используются операторы строгого равенства === (тройное равно) и !==. Они сравнивают без приведения типов. Если тип разный, то такие значения всегда неравны (строго): показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
Сравнение с null и undefinedПроблемы со специальными значениями возможны, когда к переменной применяется операция сравнения > < <= >=, а у неё может быть как численное значение, так и null/undefined. Интуитивно кажется, что null/undefined эквивалентны нулю, но это не так! Они ведут себя по-другому.
Посмотрим забавные следствия. Некорректный результат сравнения null с 0 Сравним null с нулём: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
Итак, мы получили, что null не больше и не равен нулю. А теперь… показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
Как такое возможно? Если нечто «больше или равно нулю», то резонно полагать, что оно либо больше, либо равно. Но здесь это не так. Дело в том, что алгоритмы проверки равенства == и сравнения >= > < <= работают по-разному. Сравнение честно приводит к числу, получается ноль. А при проверке равенства значения null и undefined обрабатываются особым образом: они равны друг другу, но не равны чему-то ещё. В результате получается странная с точки зрения здравого смысла ситуация, которую мы видели в примере выше. Несравнимый undefined Значение undefined вообще нельзя сравнивать: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
Вывод: любые сравнения с undefined/null, кроме точного ===, следует делать с осторожностью. Желательно не использовать сравнения >= > < <=, во избежание ошибок в коде. |