- doctor Brain
- Оператор логического отрицания
- Оператор двойного отрицания
- Новые публикации
- JavaScript: сохраняем страницу в pdf
- HTML: Полезные примеры
- CSS: Ускоряем загрузку страницы
- JavaScript: 5 странностей
- JavaScript: конструктор сортировщиков
- Категории
- О нас
- Что означает два восклицательных знака «!!» перед выражением?
- Что означает двойной восклицательный знак в JavaScript?
- Следующие значения рассматриваются JavaScript как ложные:
- Следующие значения рассматриваются JavaScript как истинные:
- Что означает логические оператор «!!»
- Решение
doctor Brain
Булевы значения (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
Является ли двойное отрицание !! отдельным оператором?
Технически — нет. Это всего лишь двукратное использование оператора логического отрицания. Но, стоит, отдать должное, использование двойного отрицания эффективно преобразует значения любого типа в булевы.
Новые публикации
JavaScript: сохраняем страницу в pdf
HTML: Полезные примеры
CSS: Ускоряем загрузку страницы
JavaScript: 5 странностей
JavaScript: конструктор сортировщиков
Категории
О нас
Frontend & Backend. Статьи, обзоры, заметки, код, уроки.
© 2021 dr.Brain .
мир глазами веб-разработчика
Что означает два восклицательных знака «!!» перед выражением?
Что означает, когда пишут два восклицательных знака перед переменной или любым другим выражением? Например:
const isTrue = (content) => return !!content; >;
Прежде всего давайте вспомним что вообще делает восклицательный знак в обычных ситуациях. Он является логическим оператором «не». Простой пример, проверяем что выражения между собой равны:
console.log('test' === 'test'); // => true
Если хотим проверить что они не равны, то добавляем восклицательный знак:
console.log('test' !== 'test'); // => false
То есть мы «перевернули» (инвертировали) проверку. Примерно то же самое происходит, когда мы добавляем восклицательный знак перед любым выражением:
const myVar = 'test'; console.log(!myVar); // => false
Обратите внимание, перед myVar стоит восклицательный знак, это отрицание, то есть можно прочитать это как «не myVar». Восклицательный знак инвертирует наше выражение, которое является строкой ‘test’. Но тут возникает вопрос: а что является не строкой ‘test’? Если подойти к вопросу философски, то можно найти бесконечное множество вещей, которые являются не строкой ‘test’. Но у интерпретатора JS на этот счёт есть чёткое правило: он вычисляет выражение справа от восклицательного знака так, чтобы получить либо true , либо false , то есть приводит к булевому типу. Строка ‘test’ приводится к булевому типу и вычисляется как true , а восклицательный знак инвертирует, то есть переворачивает true на false , так как false является противоположностью true .
Теперь гораздо легче понять что делают два восклицательных знака:
const isTrue = (content) => return !!content; >;
Интерпретатор пытается вычислить сначала !content . Если content будет ложным выражением, то вычислится true , если истинным, то false . А второй восклицательный знак переворачивает true на false , а false на true . В итоге, если контент существует, то функция вернёт true , а если не существует, то false .
Теперь возникает вопрос: зачем вообще это нужно? Это делается чтобы мы всегда работали с определённым типом. Такой хитрый способ позволяет нам добиться чтобы функция всегда возвращала булевый тип. Любое значение будет преобразовываться в этот булевый тип. Это называется приведение типов.
Что означает двойной восклицательный знак в JavaScript?
Если вы когда-нибудь замечали двойной восклицательный знак (!!) в чьем-то коде JavaScript, вам может быть любопытно, для чего он нужен и для чего он нужен. Это действительно просто: это короткий способ преобразовать переменную в логическое (истинное или ложное) значение. Позволь мне объяснить.
Двойной восклицательный знак мгновенно идентифицирует вас как возбужденного интернет-плаката, который плохо знаком с разговорным английским. (если вы не пишете на JavaScript, и в этом случае все в порядке). Двойной восклицательный знак или двойной удар преобразует правдивое или ложное значение в «истина» или «ложь. ». Другими словами, он работает точно так же, как Boolean (value).
Следующие значения рассматриваются JavaScript как ложные:
Следующие значения рассматриваются JavaScript как истинные:
- Объект: <>
- Массив: []
- Не пустая строка: «anything»
- Число кроме нуля: 3.14
- Дата: new Date();
Механизм JavaScript, выполняющий ваш код, будет пытаться преобразовать (или принудить) значение в логическое значение, когда это необходимо, например, при оценке в операторе if.
JavaScript — это не статический язык, это скорее динамический язык. Это означает, что переменная может ссылаться или содержать значение любого типа, и, кроме того, этот тип может быть изменен в любой момент. Вам решать, предпочитаете ли вы статический или динамический язык.
Но мы определенно можем иметь представление о типе в JavaScript. Вот краткий список различных типов данных в JavaScript:
— Boolean
— String
— Number
— Object
Привести объект к логическому. Если оно было ложным (например, 0, null, undefined и т. Д.), Оно будет ложным, в противном случае — истинным. Логический тип данных является самым простым из всех типов данных, поскольку представляет собой простое битовое значение: 0 (ложь) или 1 (истина).
Так !! не оператор, это просто! оператор дважды.
Позвольте мне объяснить лучший пример для определения версии IE
let isIE8 = false; isIE8 = !! navigator.userAgent.match(/MSIE 8.0/); console.log(isIE8); // returns true or false
Если вы используете код ниже
console.log(navigator.userAgent.match(/MSIE 8.0/)); // returns either an Array or null
Вместо этого, если вы используете !! результат будет другим
console.log(!!navigator.userAgent.match(/MSIE 8.0/)); // returns either true or false
Что означает логические оператор «!!»
Просматривая исходный код ВК JS я наткнулся на строку: revert = !!cur.options.revert. cur у них — это глобальный объект, но не об этом речь. Что значат два восклицательных знака перед ним? Насколько мне известно, что один — это отрицание (НЕ), а два?
Как написать регулярное выражение для выдергивания английских букв и символов: «+», «,», «:», «-«, » «, «!», «?» и «.»
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и.
Получить значение из >
Есть такая строка var my = ‘>’; Как из.
Сообщение было отмечено qwertyyyyyw как решение
Решение
qwertyyyyyw, это значит, что им нужно проверить есть ли у cur.options свойство revert
Добавлено через 4 минуты
они дважды инвертируют существование
то есть undefined, null, 0, false всё это примерно равно(==) false
получается мы сначала проверяем на наличие, если нету то схема такая
!!undefinde = !true = false
и если там есть какое-то значение то будет так
!!»str» = !false = true
я вот лично последнее время для краткости написания использую вместо true !0, а вместо false !1