JS按位非 運算子與 運算子的理解

2021-08-31 00:06:22 字數 1108 閱讀 7175

其實是一種利用符號進行的型別轉換,轉換成數字型別

~~true == 1

~~false == 0

~~"" == 0

~~ == 0

~~undefined ==0

~~!undefined == 1

~~null == 0

~~!null == 1

按位非運算子,簡單的理解就是改變運算數的符號並減去1,當然,這是只是簡單的理解能轉換成number型別的資料

那麼,對於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()->-1; 

在jquery裡面,有用到比如if(!~this.classname.indexof(str));這裡,對於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; 

按位與運算子

參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即 0000 0011 0000 0101 0000 0001 因此,3 5的值得1。另,負數按補碼形式參加按位與運算。與運算 的特殊用...

按位運算子

基本運算子 按位與運算子,可以對變數s的特定位清零,這時可以設定乙個變數mask,將mask中的特定位賦值為0,其他位置為1,然後作運算 s s mask 即可特定位清零。使用按位與運算,可以取變數s的指定位的值,這時可以設定乙個變數mask,將mask中的指定位賦值為1,其他位置賦值為0,然後作運...

按位運算子

1.按位取反或者二進位制補碼 把1變為0,把0變為1 2.按位與 任何位與0組合都為0,任何位與1組合都為本身 應用 關閉位 清空位 需要開啟乙個值中的特定位,同時保持其他位不變 所有位為0 把1變為0,其餘位不變。假設有乙個二進位制數00011010 從左到右的第4位1表示開關,現在要關閉開關 置...