Читайте внимательно учебник. Судя по вопросам вы читаете 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