Работа побитового оператора ~(тильда)

325
18 января 2017, 01:56

Здравствуйте, мне встретился код, не могу понять использование побитового оператора ~ в проверке на наличие подстроки в строке.

/*Создайте функцию 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(' '); 
}

Answer 1

Работу оператора тильда ~ можно описать формулой

-(N + 1)

где N - число перед тильдой.

Поэтому, например var a = ~15; console.log(a); выдаст -16

В вашем случае получается, что в результате indexOf может вернуться число или -1. С помощью тильды это преобразуется в -1 или в -(N + 1) соответственно. Ну а далее будет сравниваться (точнее проверяться на неравенство минус единице), что выдаст true или false ну и соответственно сработает условный оператор или нет

Вообще условный оператор с indexOf можно было бы заменить на

if (~obj.className.indexOf(name))
READ ALSO
Как проверить, приходит ли ответ на запрос в формате JSON

Как проверить, приходит ли ответ на запрос в формате JSON

Как проверить, что при Ajax-запросе в data приходит JSON, а не что-то иное?

391
Как сделать notification постоянным?

Как сделать notification постоянным?

ЗдравствуйтеНе получается notifications сделать постоянным

319
Форма сортировки объектов From/To

Форма сортировки объектов From/To

Здравствуйте! Необходимо сверстать форму следующего вида:

348
Как работает вынос видео в окно в опере

Как работает вынос видео в окно в опере

Есть такая штука в опере, вынос видео в окно, которое стоит поверх всех остальныхКак можно реализовать подобную фичу средствами js?

423