Здравствуйте, мне встретился код, не могу понять использование побитового оператора ~ в проверке на наличие подстроки в строке.
/*Создайте функцию addClass(obj, name),
которая добавляет в список класс name, но только если его там еще нет*/
function addClass(obj, name) {
var classes = (obj.className) ? obj.className.split(' ') : [];
if (~obj.className.indexOf(name) !== -1) classes.push(name);
obj.className = classes.join(' ');
}
Работу оператора тильда ~ можно описать формулой
-(N + 1)
где N - число перед тильдой.
Поэтому, например var a = ~15; console.log(a); выдаст -16
В вашем случае получается, что в результате indexOf может вернуться число или -1. С помощью тильды это преобразуется в -1 или в -(N + 1) соответственно. Ну а далее будет сравниваться (точнее проверяться на неравенство минус единице), что выдаст true или false ну и соответственно сработает условный оператор или нет
Вообще условный оператор с indexOf можно было бы заменить на
if (~obj.className.indexOf(name))
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости