Здравствуйте, мне встретился код, не могу понять использование побитового оператора ~ в проверке на наличие подстроки в строке.
/*Создайте функцию 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))
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как проверить, что при Ajax-запросе в data приходит JSON, а не что-то иное?
Есть такая штука в опере, вынос видео в окно, которое стоит поверх всех остальныхКак можно реализовать подобную фичу средствами js?