3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
波浪形運(yùn)算符實(shí)際上并不是jQuery的一部分 - 它本身就是JavaScript中的一個(gè)NOT運(yùn)算符。
參見蒂爾德的神秘之處(?)。
您在實(shí)驗(yàn)中得到了奇怪的數(shù)字,因?yàn)槟趯φ麛?shù)執(zhí)行按位邏輯運(yùn)算(據(jù)我所知,可能存儲為兩個(gè)補(bǔ)碼或類似的東西......)
兩個(gè)補(bǔ)碼解釋了如何用二進(jìn)制表示數(shù)字。我想我是對的。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
!!~expr計(jì)算結(jié)果為false,當(dāng)expr為-1,否則true。
它是一樣的expr != -1,只有破碎的*
它的工作原理是JavaScript按位運(yùn)算將操作數(shù)轉(zhuǎn)換為二進(jìn)制補(bǔ)碼格式的32位有符號整數(shù)。因此!!~-1評估如下:
-1 = 1111 1111 1111 1111 1111 1111 1111 1111b // two's complement representation of -1
~-1 = 0000 0000 0000 0000 0000 0000 0000 0000b // ~ is bitwise not (invert all bits)
!0 = true // ! is logical not (true for falsy)
!true = false // duh
除了-1將至少一個(gè)位設(shè)置為零之外的值; 顛倒它將創(chuàng)造一個(gè)真正的價(jià)值; 將!運(yùn)算符兩次應(yīng)用于truthy值返回boolean true。
使用時(shí).indexOf(),我們只想檢查結(jié)果是否-1:
!!~"abc".indexOf("d") // indexOf() returns -1, the expression evaluates to false
!!~"abc".indexOf("a") // indexOf() returns 0, the expression evaluates to true
!!~"abc".indexOf("b") // indexOf() returns 1, the expression evaluates to true
* !!~8589934591評估為假,所以這個(gè)厭惡不能可靠地用于測試-1。
添加回答
舉報(bào)