Существует еще одна причина, по которой indexOf возвращает -1, если совпадений не найдено. Рассмотрим код ниже:
if (~str.indexOf(pattern)){
console.log('found')
}else{
console.log('not found')
}
Поскольку ~ (-1) = 0, поэтому тот факт, что indexOf, возвращающий -1, облегчает запись, если ... еще используя ~.