2015-06-25 5 views
4

я только собирался через код modenizer и наткнулся на следующую функцию:понимание modenizer содержит функции

function contains(str, substr) { 
    return !!~('' + str).indexOf(substr); 
} 

modenizer имеет много такой небольшой функции для небольших тестов. Теперь приходит на мой вопрос, я понимаю, что двойной равный для преобразования все, чтобы логическое значение, но что !!~ для также то, что является

'' 

перед str для ??

Я видел несколько вопросов по SO, которые адресуют подобные проблемы, но не совсем эту проблему, может кто-нибудь объяснить, что происходит внутри этой функции в контексте этого примера.

ответ

2

!!~('' + str)

  1. !!: Преобразование в булево (true/false)
  2. ~: Bitwise NOT Унарное оператор приводит в действие путем изменения всех битов в операнде. Инвертирует биты своего операнда.

    Побитовое указание любого числа x дает - (x + 1).

  3. '' + str: Тип Отливка Преобразует ул чтобы string

Сначала оператор отбрасывает str к string затем переворачивает все биты двоичного, а затем возвращает логический результат.

Пример

contains('abcd', 'd'); 

1. If str is not string then it is converted to string 

    true + '' // "true" 
    1 + '' // "1" 

2. `indexOf` 
    The index of `substr` is returned. 

3. `~` 
    The bitwise NOT of 3 which is -(3 + 1) = -4 

4. `!!` 
    !!-4 = true 


true will be returned. 
+0

Благодаря гениальным! по последнему запросу вы можете привести несколько примеров '~'? , Спасибо вам –

+0

@Tenali_raman См. MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT – Tushar

+1

@Tenali_raman Я добавил пошаговое объяснение того, как работает 'contains' – Tushar

2

Хорошая вещь. ~ x побитовое. Для -1 побитовое не равно 0. Таким образом, ~ ~ означает 'не -1' в булевом представлении.