Что означает два восклицательных знака "!!" перед выражением?
Что означает, когда пишут два восклицательных знака перед переменной или любым другим выражением? Например:
- приведение типов
- JavaScript

Прежде всего давайте вспомним что вообще делает восклицательный знак в обычных ситуациях. Он является логическим оператором "не". Простой пример, проверяем что выражения между собой равны:
Если хотим проверить что они не равны, то добавляем восклицательный знак:
То есть мы "перевернули" (инвертировали) проверку. Примерно то же самое происходит, когда мы добавляем восклицательный знак перед любым выражением:
Обратите внимание, перед myVar стоит восклицательный знак, это отрицание, то есть можно прочитать это как "не myVar". Восклицательный знак инвертирует наше выражение, которое является строкой 'test'. Но тут возникает вопрос: а что является не строкой 'test'? Если подойти к вопросу философски, то можно найти бесконечное множество вещей, которые являются не строкой 'test'. Но у интерпретатора JS на этот счёт есть чёткое правило: он вычисляет выражение справа от восклицательного знака так, чтобы получить либо true , либо false , то есть приводит к булевому типу. Строка 'test' приводится к булевому типу и вычисляется как true , а восклицательный знак инвертирует, то есть переворачивает true на false , так как false является противоположностью true .
Теперь гораздо легче понять что делают два восклицательных знака:
Интерпретатор пытается вычислить сначала !content . Если content будет ложным выражением, то вычислится true , если истинным, то false . А второй восклицательный знак переворачивает true на false , а false на true . В итоге, если контент существует, то функция вернёт true , а если не существует, то false .
Теперь возникает вопрос: зачем вообще это нужно? Это делается чтобы мы всегда работали с определённым типом. Такой хитрый способ позволяет нам добиться чтобы функция всегда возвращала булевый тип. Любое значение будет преобразовываться в этот булевый тип. Это называется приведение типов.
TypeScript: восклицательный знак
В этой статье мы рассмотрим одну из интересных особенностей TypeScript — восклицательный знак. Он используется для работы с типами и предоставляет разработчику возможность указать, что значение переменной гарантированно не будет равно null или undefined .
Синтаксис
Восклицательный знак ставится после имени переменной и перед точкой, когда мы обращаемся к свойствам объекта:
Зачем это нужно?
TypeScript стремится предоставить безопасность типов, чтобы избегать ошибок, связанных с неправильным использованием переменных. Однако иногда разработчики уверены, что значение переменной будет определено, даже если тип может быть null или undefined .
В таких случаях восклицательный знак позволяет указать компилятору, что значение переменной гарантированно определено, и ошибки не возникнет. Это позволяет избежать ненужных проверок на null и undefined .
Пример использования
В примере выше, мы создали интерфейс User с опциональным полем email . В функции getEmail мы используем восклицательный знак, чтобы указать, что значение email точно будет определено.
Важное замечание
Несмотря на удобство использования восклицательного знака, стоит быть осторожным и использовать его только в тех случаях, когда вы абсолютно уверены, что значение переменной гарантированно определено. В противном случае, вы рискуете получить ошибки во время выполнения программы, которые сложнее найти и исправить, чем ошибки компиляции.
Альтернативы восклицательному знаку
Если вы не уверены в том, что значение переменной гарантированно определено, рассмотрите использование других подходов, предоставляемых TypeScript для работы с возможными null или undefined значениями.
Оператор объединения с null (??)
Оператор объединения с null позволяет задать значение по умолчанию, которое будет использовано, если значение переменной равно null или undefined :
Оператор опциональной цепочки (?.)
Оператор опциональной цепочки позволяет безопасно обращаться к свойствам объекта, которые могут быть null или undefined , вернув значение undefined , если это происходит:
Заключение
Восклицательный знак в TypeScript — это удобный инструмент, который позволяет разработчикам явно указать, что значение переменной гарантированно определено. Однако, стоит использовать его с осторожностью, чтобы избежать ошибок во время выполнения программы. Рассмотрите использование альтернативных подходов, если вы не уверены в определенности значения переменной.
Зачем нужен восклицательный знак при объявлении переменной TS?
тк он явно не является частью названия переменной, также не думаю, что он говорит о том, что переменная не может быть равна null | undefined:
- Вопрос задан более года назад
- 2141 просмотр
Простой 1 комментарий
- Вконтакте

Моя реакция когда я вижу всё это новомодное дерьмо: 
Понимание использования восклицательного знака перед функцией в JavaScript

В JavaScript, очень распространена практика использования восклицательного знака перед функцией. Это может вызвать некоторое недоумение, особенно у тех, кто только начинает изучать язык. Чтобы разобраться в этом, рассмотрим следующий пример:
Вот что происходит. Здесь восклицательный знак ( ! ) используется перед функцией для того, чтобы JavaScript интерпретировал выражение как функциональное выражение, а не как объявление функции.
В JavaScript, функциональные выражения и объявления функций обрабатываются по-разному. Объявления функций «всплывают» в верхушку своего контекста выполнения, что позволяет вызывать функцию до того, как она была объявлена. С другой стороны, функциональные выражения не «всплывают» и могут быть вызваны только после того, как они были определены.
Когда перед функцией стоит восклицательный знак, JavaScript принимает это как функциональное выражение, а не как объявление функции. Это позволяет немедленно вызвать функцию.
В этом контексте, восклицательный знак действует как логическое отрицание. Он превращает результат функции в булево значение и затем инвертирует его. Но поскольку цель здесь в основном состоит в том, чтобы вызвать функцию, а не получить булево значение, результат этого отрицания обычно игнорируется.
Важно заметить, что вместо восклицательного знака можно использовать и другие операторы, такие как + , — ,
или void . Они все смогут превратить объявление функции в функциональное выражение, позволяя его немедленно вызвать.
В итоге, восклицательный знак перед функцией в JavaScript — это просто способ сделать функцию немедленно вызываемой.