首頁  >  文章  >  web前端  >  javascript位元非運算子的使用方法_基礎知識

javascript位元非運算子的使用方法_基礎知識

WBOY
WBOY原創
2016-05-16 17:15:191161瀏覽

~:位元非操作符由一個波浪線(~)表示,執行位元非的結果就是傳回數值的反碼。

複製程式碼 代碼如下:

var num1 = 3;   3
var num2 = ~(num1);
console.log(num2)  //  "-4"
var num3 = -3; 
var num4 = ~(num3);
console.log(num4)  //  "2"
console.log(~(0))  //  "-1"

沒錯,現在我們知道了~運算子的原理了。開心嗎? 。 。 。不開心,雖然這一章,我看過好多次。 。 。因為我從來就沒用過,實在是慚愧啊。大家覺得這個運算子可以用在什麼地方呢?恩。 。 。沉思一下,放同事的程式碼:
複製程式碼 程式碼如下:

if~ item[search_key].toLowerCase().indexOf(query)) {
                      🎜>


複製程式碼
原理分析:
透過str.indexOf(query)最後得出的值,無外乎不過兩種:
1. str中包含query字串,則值是0或正整數,此時:!!(~str.indexOf(query)) === true(或這樣轉換Boolean(~str.indexOf(query)) === true)
2 . srt中不包含query字串,則值為-1,此時:!!(~str.indexOf(query)) === false
因此透過加上一個~就能很好的對indexOf的查詢結果進行判斷了。清爽無比,從此再也沒有頭皮屑的煩惱了。 。哈哈!
最後我們來分析一下效率吧,印像中位數運算的效率應該比較運算子高。來段程式碼:




複製程式碼
程式碼如下:var str = "hutaogoergo go go !!!!! My lucky number is 33!!";    var query = 33;    var timeStart1 = new Date() - 0;
    timeStart1 = new Date() - 0;
    for(var i = 000 i00000 i000; ) {
        ~str.indexOf(query)
    }
    var timeEnd1 = new Date() - 0;
   var timeEnd1 = new Date() - 0;
   長度為 . 🎜>    // ~ cost time:9954  循環次數:10000000
    // ~ cost time:104  循環次數:100000
   j         str.indexOf(query) >= 0
    }
    var timeEnd2 = new Date) -
    var timeEnd2 = new Date) -   // >= cost time:10120  循環次數:10000000


程式更新:原先的測試程式碼在分割線上面不變。程式碼如下:



複製程式碼
程式碼如下:

    var str = "hutaoer go go go!!!!! 我的幸運數字是33!!";
    var query = 33;
   
    for(var i = 0; i         ~str.indexOf(query)
  .log ('~ 花費時間:' (timeEnd1 - timeStart1));
    //  循環1000000次  127ms
    var time(var j ) {
        str.indexOf(query) >= 0
    }
    var time ));
    // 循環1000000次101ms
    var timeStart3 = new Date() - 0;
    for(var k = 000     }
    var timeEnd3 = new Date() - 0;
    console.log('新增布林成本時間:' (End13 - timeStart3));次129ms
    var timeStart4 = new Date() - 0;
    for(var k = 0; k  
    var timeEnd4 = new Date() - 0;
    console.log('add !! cost time:' (timeEnd4 - timeStart4));
其實,對於一次攻擊本身來說,另外無幾,只是在循環次數過大,比如超過了10000000次,效率才會有一些差距。
【更新2013.10.27 17:28】透過後面的測驗修改,我們可以發現,「按位非」這中寫法也許並不是效率最高的,表現最高的好的其實是我以前常用的寫法,採用比較符號。這確實讓我很驚訝。有時候,人們往往很容易被常識所迷惑,表象所迷惑,但親自去嘗試後,也許會有不一樣的發現或得出了其他的結果。今天,我算吸取了教訓。
在評論中,我們都比較反對這種非常見的同學寫法,畢竟這些技巧可能會給閱讀代碼的同學造成困擾。如果不是原理的話,甚至讓人費解。但也許,直接用一些簡單的邏輯和常見的運算符,會是更好的選擇嗎?你們覺得呢?
所以平常寫程式碼的時候,用哪種寫法都可以。我們可以記住這些技巧,關鍵時刻可以派上用場。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn