JavaScript按位非操作符(~)
問(wèn)題描述
看到<TFC2017/>的抽獎(jiǎng)代碼
~~23.5 // 23
為什么~操作符可以將數(shù)字取整呢?
問(wèn)題解答
回答1:經(jīng)過(guò) ToInt32。其作用是將被操作數(shù)的二進(jìn)制形式按位翻轉(zhuǎn)。所以?xún)蓚€(gè) ~~ 連在一起就相當(dāng)于進(jìn)行了如下操作:
對(duì)操作數(shù)進(jìn)行 ToInt32
按位翻轉(zhuǎn)
再次按位翻轉(zhuǎn)實(shí)際上也還是利用了 ToInt32 的絕對(duì)值取整
另外關(guān)于 ~ 操作符有個(gè)技巧還是比較實(shí)用的:~(-1) 的值為 0,而且 -1 是唯一一個(gè)經(jīng)過(guò) ~ 運(yùn)算返回假值的值(包括其他那些特殊的值比如 NaN、{}、[] 等都不會(huì)返回假值)字符串和數(shù)組的 indexOf 函數(shù)查找失敗會(huì)返回 -1,這時(shí)候就可以用 if(~str.indexOf(’str’)) // 來(lái)表示找到了比判斷 >= 0 或者 != -1 更優(yōu)雅,跟用 !! 來(lái)判斷非假值有異曲同工之妙
作者:mdluo鏈接:https://www.zhihu.com/questio...
取整是把浮點(diǎn)數(shù)轉(zhuǎn)化了32位二進(jìn)制整數(shù),所以能還原狀態(tài)的位操作都能進(jìn)行取整,如23.5 >> 0 //23、23.5 >> 0 //23。
相關(guān)文章:
1. angular.js - angular ng-class里面的引號(hào)問(wèn)題2. css - 對(duì)于類(lèi)選擇器使用的問(wèn)題3. javascript - Web微信聊天輸入框解決方案4. docker - 如何修改運(yùn)行中容器的配置5. html - vue項(xiàng)目中用到了elementUI問(wèn)題6. 網(wǎng)頁(yè)爬蟲(chóng) - 用Python3的requests庫(kù)模擬登陸B(tài)ilibili總是提示驗(yàn)證碼錯(cuò)誤怎么辦?7. javascript - Ajax加載Json時(shí),移動(dòng)端頁(yè)面向左上角縮小一截兒,加載完成后才正常顯示,這該如何解決?8. javascript - 有沒(méi)有什么好的圖片懶加載的插件,需要包含監(jiān)聽(tīng)頁(yè)面滾動(dòng)高度,然后再加載的功能9. python - 為什么在main()函數(shù)里result 會(huì)變成那樣?10. mysql無(wú)法添加外鍵
