Я пытаюсь прочитать исходный код Zepto.js
. И есть место в функции matches
, что я не понимаю:Какова цель использования ~ в JavaScript?
zepto.matches = function(element, selector) {
if (!selector || !element || element.nodeType !== 1) return false
var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
element.oMatchesSelector || element.matchesSelector
if (matchesSelector) return matchesSelector.call(element, selector)
var match, parent = element.parentNode, temp = !parent
if (temp) (parent = tempParent).appendChild(element)
//Here is my question. This line used the `~`
match = ~zepto.qsa(parent, selector).indexOf(element)
temp && tempParent.removeChild(element)
return match
}
matches
Функция используется для определяет, соответствует ли элемент селектора при условии. Он должен возвращать логическое значение.
И zepto.qsa()
- это реализация селектора CSS Zepto, которая использует document.querySelectorAll
и некоторые другие оптимизирует.
So. Какова цель ~
в следующем коде?
match = ~zepto.qsa(parent, selector).indexOf(element)
Я знаю, что означает ~
Bitwise NOT
.
И (по моим собственным тестам):
~ -1 === 0
~ 0 === -1
~ 1 === -2
Но я до сих пор не понимаю, что этот дизайн для.
Может кто-нибудь объяснить?
Если вы знаете, что это побитовое НЕ, то в чем проблема? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT – j08691
https://stackoverflow.com/questions/654057/where-would-i-use-a- bitwise-operator-in-javascript – lifetimes
http://stackoverflow.com/q/9316612/1331430 –