Что означает «!!~»?

Привет.
Где можно ознакомиться со списком таких значений?

Пример
function contains(arr, elem, from) {
   return !!~arr.lastIndexOf(elem, from);
}
  • Вопрос задан
  • 1214 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Сокращалка, удобная для indexOf(), который возвращает -1 если не найдено, или индекс от 0 и больше.

Для логики приложения часто бывает нужно узнать только, найдено или нет: т.е. -1 или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ } но иногда хочется короче.

Битовый оператор НЕ ~ хорош тем, что выделяет -1: только -1 с этим оператором даст 0. Прочие числа дадут какое-то ненулевое значение.

~(-1) === 0

Остаётся привести значение из численного в булево. Для этого два воскл. знака — два логических НЕ.
  • для варианта «найдено» из числа от 0 и больше получилось тоже ненулевое число, и !! даст true
  • для варианта «не найдено» из -1 получится уникальный 0, и !!0 вернёт false
Ответ написан
E1ON
@E1ON Куратор тега JavaScript
Programming, Gamedev, VR
https://developer.mozilla.org/en-US/docs/Web/JavaS...

~ Заменяет каждый бит операнда на противоположный.
!! (Логическое НЕ) Возвращает false, если операнд может быть преобразован в true; в противном случае возвращает true.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы