• Суть 3 строки,если можно подробно "по символам грубо говоря"?

    evgeniy8705
    @evgeniy8705
    Повелитель вселенной
    Читайте внимательно учебник. Судя по вопросам вы читаете learn.javascript.ru. В нем все очень подробно разбирается. Не поняли с одного раза, читайте еще раз, до тех пор пока не поймете. Вы задаете, очень глупые вопросы.

    function checkSpam(str) {
      var lowerStr = str.toLowerCase();
    
      return !!(~lowerStr.indexOf('viagra') || ~lowerStr.indexOf('xxx'));
    }
    
    console.log(checkSpam('buy ViAgRA now'));
    console.log(checkSpam('free xxxxx'));
    console.log(checkSpam("innocent rabbit"));


    ~lowerStr.indexOf('viagra') // Если подстрока найдена, то вернется ее индекс начальной позиции.
    Если подстрока не найдена, то вернется -1. Для удобства делают побитовое НЕ (~).
    т.е если строка будет найдена то в любом случае вернется положительное число, при побитовом НЕ, оно так станет в любом случае или строго меньше 0 или строго больше.
    А любое число отличное от 0 является true. Если строка не будет найдена, то вернется -1, при побитовом НЕ, станет 0. В логическом представлении false.
    Тоже самое и с ~lowerStr.indexOf('xxx').
    !! - это двойное отрицание. Костыльный прием перевести что угодно в булевый тип, trueили false.
    || - это побитовое ИЛИ.

    // В итоге при передачи строки "buy ViAgRA now":
    // ~lowerStr.indexOf('viagra') = -5
    // ~lowerStr.indexOf('xxx') = 0
    // (~lowerStr.indexOf('viagra') || ~lowerStr.indexOf('xxx')) = -5
    // !!(~lowerStr.indexOf('viagra') || ~lowerStr.indexOf('xxx')) = true
    // Возвращается true


    Вот так возможно вам будет более ясно как работает "проверка спама":
    let checkSpam = string => {
    	let lowerCaseString = string.toLowerCase(); // "Преобразовать" строку в строку с нижним регистром
      
      if (lowerCaseString.indexOf(`viagra`) != -1 || lowerCaseString.indexOf(`xxx`) != -1) { // Если найдена хотя бы одна из подстрок, то вернуть true
      	return true;
      } else { // иначе вернуть false
      	return false;
      }
    }
    
    console.log(checkSpam('buy ViAgRA now')); // true
    console.log(checkSpam('free xxxxx')); // true
    console.log(checkSpam("innocent rabbit")); // false
    Ответ написан
    1 комментарий