Логические операторы в JavaScript

В языке программирования JavaScript есть пять логических операторов || (или), && (и), ! (не), менее известный ?? оператор нулевого слияния, который еще относят к частному случаю оператора || (или) и тернарный оператор. Логические операторы используются для комбинирования булевых значений - true (истина) и false (ложь) и часто применяются в сочетании с операторами отношений (>, >=, <, <=, ==, !=), объединяя два и более выражения в одно более сложное.

Сразу стоит уточнить, что логические операторы могут применяться к значениям любых типов, результат также может иметь различный тип. Но нужно помнить, что все значения в JavaScript являются либо true либо false.

Если значение равно 0, -0, null, false, NaN, undefined или "" (пустая строка) - результат false. Все остальное, включая строку "false" - результат true.

Остановимся подробнее на операторах || (или), && (и) и ! (не)

Логическое И &&

&& (двой знак амперсанда) - это бинарный оператор, который представляет собой логически «и» и принимает значение true только в том случае, когда оба операнда истинны, в противном случае false.

Рассмотри результат при каждой возможной логической комбинации.


    console.log( true && true );   // true
    console.log( false && true );  // false
    console.log( true && false );  // false
    console.log( false && false ); // false     
  

Пример №1

    
    let examScores1 = parseInt(prompt("Введите баллы за первый экзамен"));
    let examScores2 = parseInt(prompt("Введите баллы за второй экзамен"));
        
    if (examScores1 >= 60 && examScores2 >= 60) {
        alert('Вы допущены к следующему экзамену');
    } else {
        alert('Вы не поступили в университет');
    }             
    

Пример №2

    
    let examScores1 = parseInt(prompt("Введите баллы за первый экзамен"));
    let examScores2 = parseInt(prompt("Введите баллы за второй экзамен"));
    let examScores3 = parseInt(prompt("Введите баллы за третий экзамен"));

    if (examScores1 >= 60 && examScores2 >= 60 && examScores3 >= 60) alert('Вы поступили в университет');
    else alert('Вы не поступили в университет');
    

При необходимости можно передать и больше условий && (и)

Пример №3

    
    if (1 && 0) { // 1 - true, 0 - false
        console.log("Результат - true");
    } else console.log( "Результат - false" );
    

В качестве операнда && допускаются любые другие значения

Пример №4

    
    console.log("текст" && undefined && 40); // значение = undefined
    console.log("текст" && 30 && 0 && 40); // значение = 0
    console.log(40 && 30 && 3 && "текст"); // значение = текст
    

В случае, когда операторов && несколько:

Если сказать по другому результат - это значение первого false или последнего операнда.

Пример №5

    
    x && y || a && b
    

Приоритет у && (и) выше чем у || (или), таким образом сначала выполнить сравнение в левой и правой части выражения.

Логическое ИЛИ ||

|| (двойная вертикальная черта) - это бинарный оператор, который представляет собой логическое «или» и принимает значение true в том случае, когда все или одно из значений операндов истинно, в противном случае false.

Рассмотри результат при каждой возможной логической комбинации.

    
    console.log( true || true );   // true
    console.log( false || true );  // true
    console.log( true || false );  // true
    console.log( false || false ); // false
    

Пример №6

    
    let examScores = parseInt(prompt("Сколько баллов вы получили за 3 экзамена"));
    let runningSpeed = parseInt(prompt("Как быстро вы пробегаете 100 метров"));
        
    if (examScores >= 250 || runningSpeed < 12) {
        alert('Вы поступили в университет');
    } else {
        alert('Вы не поступили в университет');
    }        
    

Пример №7

    
    let examScores = parseInt(prompt("Сколько баллов вы получили за 3 экзамена"));
    let runningSpeed = parseInt(prompt("Как быстро вы пробегаете 100 метров"));
    let placeOlympiad = parseInt(prompt("Какое место вы заняли на всероссийской олимпиаде"));
    
    if (examScores >= 250 || runningSpeed < 11 || placeOlympiad == 1) {
        alert('Вы поступили в университет');
    } else {
        alert('Вы не поступили в университет');
    }        
    

При необходимости можно передать и больше условий || (или).

Пример №8

    
    if (1 || 0) { // 1 - true, 0 - false
        console.log("Результат - true")
    } else console.log( "Результат - false" );
    

В качестве операнда || допускаются любые другие значения.

Пример №9

    
    console.log(undefined || "текст" || 40); // значение = текст
    console.log("" || null || 0 || "текст"); // значение = текст
    console.log(40 || 30 || 3 || "текст"); // значение = 40
    

В случае, когда операторов || несколько:

Если сказать по другому результат - это значение первого true или последнего операнда.

Пример №10

    
    let scores = parseInt(prompt("Сколько баллов вы набрали на экзамене"));

    scores < 90 || alert('Ваша оценка 5');
    

В результате «сокращенного вычисления» (когда вычисления заканчиваются, если результат уже известен) с помощью || (или), можно реализовывать и такие конструкции. В данном примере это своеобразная замена if, которая может быть удобна в определенных случаях.

Логическое НЕ !

! (восклицательный знак) - это унарный оператор, который располагается перед операндом и приводит аргумент к логическому true или false, а затем возвращает противоположное значение.

    
    console.log( !true ); // false
    console.log( !false ); // true
    console.log( !'текст' ); // false
    console.log( !5 ); // false
    console.log( !0 ); // true
    

В свою очередь двойное отрицание !! используется для приведения значения к логическому типу.

    
    console.log( !!true ); // true
    console.log( !!false ); // false
    console.log( !!'текст' ); // true
    console.log( !!5 ); // true
    console.log( !!0 ); // false
    

Эквивалентом такой конструкции служит встроенная функция Boolean

    
    console.log( Boolean('текст') ); // true
    console.log( Boolean(5) ); // true
    console.log( Boolean(0) ); // true
    

Логически оператор ! имеет более высокий приоритет, нежели || и &&, поэтому при необходимости сделать отрицание выражения, конструкцию нужно брать в скобки.

    
    console.log( !(true && false) ); // true
    console.log( !true && false ); // false
        
    console.log( !(true || true) ); // false
    console.log( !true || true ); // true
    

Итого

В данном уроке мы подробно рассмотрели логические операторы:

Из этих трех операторов наивысший приоритет исполнения имеет ! (не), затем && (и) и только потом || (или).