Страницы

Поиск по вопросам

воскресенье, 24 ноября 2019 г.

Двойное отрицание


Как понимать двойное отрицание: !! (например, в JavaScript)?
    


Ответы

Ответ 1



В javascript всякое значение может быть интерпретировано как Boolean. (Правила этой интерпретации довольно сложны и не вполне интуитивны.) Если вы укажете какое-нибудь выражение там, где ожидается Boolean (например, внутр if'а), оно проинтерпретируется как Boolean, и всё. Но если вы хотите получить соответствующий Boolean (например, чтобы вернуть его из функции или присвоить другой переменной), вам нужен трюк, который заставит систему проинтерпретировать ваше выражение в булевом контексте. Для этой цели традиционно используется двойное отрицание: первое отрицание "требует булев контекст, так что выражение интерпретируется как Boolean, а второе отрицание "отменяет" первое. Из документации: Оператор отрицания: возвращает false если его аргумент может быть преобразован true, в противном случае возвращает true. Для справки: значения, которые в булевом контексте будут проинтерпретированы ка false суть следующие: число 0.0 число NaN undefined null пустая строка ну и конечно false Все остальные значения будут проинтерпретированы как true. Пример: если x -- объект или null, вместо if (x != null) return true; else return false; можно воспользоваться изящным return !!x; По поводу других языков: подобный трюк нужен в основном в слабо типизированных языка вроде javascript'а, в котором значением переменной может быть и true/false, и undefined и функция, и объект. Применение двойного отрицания гарантирует отсутствие неожиданностей в поведении полученного объекта: его тип то уж точно boolean. Однако, я встречал этот трюк и в C++ в контексте явного преобразования указателя в bool.

Комментариев нет:

Отправить комментарий