那麼,對於typeof var!==”number”的類型來說,進行運算時,會嘗試轉化成32位整形數據,如果無法轉換成整形數據,就轉換為NaN;
JS在位運算上用了更簡便的一種方法來實現這中運算,那麼它的實現原理大致上可以這樣理解:
復制代碼 代碼如下:
var testData=-2.9;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;
首先,如果一個數據在嘗試轉換為32整形數據時,結果<0,那麼就需要對其上捨入,比如-2.9->-2,如果>0,對其下捨入,比如:2.6->2;
一個數據如果不能轉換為32位二進制表示,就轉換為NaN;繼而轉為-1;比如~{}/~NaN ==-1;
又比如~function(){return 100;}->-1;
在Jquery裡面,有用到比如if(!~this.className.indexOf(str)){ //do some thing…..};這裡,對於this.className.indexOf(str)的返回值,要麼大於-1,要麼就是等於-1;在其等於-1的時候,~-1===0;然後,!~-1===true;那麼就可以得出this不包含str這個class名…;
對於~~運算符,同理,它也可以表示為:
復制代碼 代碼如下:
var testData=2.1;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?Math.floor(testData):Math.ceil(testData):0;
同樣采用上下捨入的方式來理解;