亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎么!!?(不是波浪形/波浪形波浪號)改變'包含/包含'數組方法調用的結果?

怎么!!?(不是波浪形/波浪形波浪號)改變'包含/包含'數組方法調用的結果?

楊__羊羊 2019-09-20 14:33:20
如果您在這里閱讀jQuery inArray頁面上的注釋,那么有一個有趣的聲明:!!~jQuery.inArray(elm, arr) 現在,我相信雙感嘆號會將結果轉換為類型boolean,值為true。我不明白的是,~在所有這些中使用了tilde()運算符是什么?var arr = ["one", "two", "three"];if (jQuery.inArray("one", arr) > -1) { alert("Found"); }重構if聲明:if (!!~jQuery.inArray("one", arr)) { alert("Found"); }分解:jQuery.inArray("one", arr)     // 0~jQuery.inArray("one", arr)    // -1 (why?)!~jQuery.inArray("one", arr)   // false!!~jQuery.inArray("one", arr)  // true我也注意到,如果我把波浪號放在前面,結果是-2。~!!~jQuery.inArray("one", arr) // -2我不明白這里代字號的目的。有人可以解釋一下或指向我的資源嗎?
查看完整描述

3 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

波浪形運算符實際上并不是jQuery的一部分 - 它本身就是JavaScript中的一個NOT運算符。


參見蒂爾德的神秘之處(?)。


您在實驗中得到了奇怪的數字,因為您正在對整數執行按位邏輯運算(據我所知,可能存儲為兩個補碼或類似的東西......)


兩個補碼解釋了如何用二進制表示數字。我想我是對的。


查看完整回答
反對 回復 2019-09-20
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

!!~expr計算結果為false,當expr為-1,否則true。

它是一樣的expr != -1,只有破碎的*


它的工作原理是JavaScript按位運算將操作數轉換為二進制補碼格式的32位有符號整數。因此!!~-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將至少一個位設置為零之外的值; 顛倒它將創造一個真正的價值; 將!運算符兩次應用于truthy值返回boolean true。


使用時.indexOf(),我們只想檢查結果是否-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評估為假,所以這個厭惡不能可靠地用于測試-1。


查看完整回答
反對 回復 2019-09-20
  • 3 回答
  • 0 關注
  • 496 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號