Двойное отрицание
двойное отрицание вместо boolean() в JavaScript
Булевы значения (boolean) названы в честь английского математика и логика Джорджа Буля (George Boole) и принимают только два значения: истина (true) или ложь (false).
Обычно, такие данные применяются в математической логике.
В программирование булевы значения нужны для определения условий управляющих структур, например: операторов выбора (if) или цикла (while).
Для того, чтобы принудительно преобразовать значение любого типа в булево (true или false) в JavaScript существует встроенная функция Boolean().
Но это не единственный способ.
Оператор логического отрицания
Для начала, познакомимся с оператором логического отрицания. Синтаксически он выглядит как восклицательный знак. Имя оператора взаимствовано из наименования отрицательного элемента булевой алгебры.
Оператор логического отрицания эффективно меняет значение с истины (true) на ложь (false) и наоборот:
onsole.log(!true); // false
console.log(!false); // true
let x = 5;
console.log(x != 3); // true
Но, что случится, если знак ! будет предшествовать значению другого типа?
Значение будет принудительно преобразовано в булево, но с противоположным смыслом:
console.log(!0); // true
console.log(!5); // false
console.log(!""); // true
console.log(!null); // true
Таким образом, значения, изначально определяемые, как ложные (false): null, 0, пустая строка - станут истинными (true).
Оператор двойного отрицания
Теперь, понимая, как работает оператор логического отрицания, мы можем принудительно преобразовать значение любого типа в булево, не искажая его смысла. Все, что для этого нужно - еще раз изменить смысл логического значение с true на false или наоборот.
console.log(!!5); // true
console.log(!!""); // false
console.log(!!null); // false
Является ли двойное отрицание !! отдельным оператором?
Технически - нет. Это всего лишь двукратное использование оператора логического отрицания. Но, стоит, отдать должное, использование двойного отрицания эффективно преобразует значения любого типа в булевы.
Спасибо за внимание.