Я понимаю, что он древний и что многие из нас уже знают его, но в последние несколько дней я болтал со своим другом, который из мира «Явы», и он спросил меня: «Эй, для чего это используется? в джаваскрипте? И я решил оставить его здесь, если он пригодится другому смертному.

Простое объяснение. Мы используем двойной восклицательный знак, чтобы преобразовать значение в логическое значение и сделать ваш код простым и легко читаемым.

Примеры:

!!0    =>  false;
!!null =>  false;
!!""   =>  false;   //Empty string
!!22   =>  true;   // lower tha cero
!!2.2  =>  true;   // also evaluate float

// even to evaluate navigator
const isIE8 = navigator.userAgent.match("/MSIE 8.0/"); => true

Сейчас. Зачем нам нужно использовать двойные восклицательные знаки?

Хотя мы знаем, что у нас также есть класс Boolean, и что он упрощает нашу жизнь, поскольку получает значение в качестве аргумента, и что раньше он делал то же самое и стал немного более читабельным. Но вот обсуждение многих разработчиков javascript. Некоторые из них считают, что использование «!!» короче, чем использование Boolean().

Однако другие считают, что логическое значение — это более явный способ приведения типов.

давайте посмотрим на следующий пример кода.

const isIE8 = navigator.userAgent.match("/MSIE 8.0/")
if(Boolean(isIE8)){
// some stuff code
}

Было бы намного лучше читать, не так ли, чем читать такой код, если вы не программист javascript?

const isIE8 = navigator.userAgent.match("/MSIE 8.0/")
if(!!isIE8){
// some stuff code
}

На мой взгляд, я предпочитаю использовать класс Boolean, потому что он намного лучше читается, и если бы я хотел быстро проверить, пуста ли строка, и дополнить ее тройным знаком, я бы использовал двойной восклицательный знак.

Хорошо!! Я надеюсь, что этот пост мог помочь вам развеять ваши сомнения по этому поводу.

Спасибо за чтение!!!

ПРИМЕЧАНИЕ. Попробуйте посмотреть на это как на математическую формулу плюс к плюсу ( + * + = +)

ссылка:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT#double_not_!!