JS按位非(~)運(yùn)算符與~~運(yùn)算符的理解分析
更新時(shí)間:2011年07月31日 23:43:10 作者:
按位非運(yùn)算符,簡(jiǎn)單的理解就是改變運(yùn)算數(shù)的符號(hào)并減去1,當(dāng)然,這是只是簡(jiǎn)單的理解能轉(zhuǎn)換成number類型的數(shù)據(jù)
那么,對(duì)于typeof var!==”number”的類型來(lái)說(shuō),進(jìn)行運(yùn)算時(shí),會(huì)嘗試轉(zhuǎn)化成32位整形數(shù)據(jù),如果無(wú)法轉(zhuǎn)換成整形數(shù)據(jù),就轉(zhuǎn)換為NaN;
JS在位運(yùn)算上用了更簡(jiǎn)便的一種方法來(lái)實(shí)現(xiàn)這中運(yùn)算,那么它的實(shí)現(xiàn)原理大致上可以這樣理解:
var testData=-2.9;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;
首先,如果一個(gè)數(shù)據(jù)在嘗試轉(zhuǎn)換為32整形數(shù)據(jù)時(shí),結(jié)果<0,那么就需要對(duì)其上舍入,比如-2.9->-2,如果>0,對(duì)其下舍入,比如:2.6->2;
一個(gè)數(shù)據(jù)如果不能轉(zhuǎn)換為32位二進(jìn)制表示,就轉(zhuǎn)換為NaN;繼而轉(zhuǎn)為-1;比如~{}/~NaN ==-1;
又比如~function(){return 100;}->-1;
在Jquery里面,有用到比如if(!~this.className.indexOf(str)){ //do some thing…..};這里,對(duì)于this.className.indexOf(str)的返回值,要么大于-1,要么就是等于-1;在其等于-1的時(shí)候,~-1===0;然后,!~-1===true;那么就可以得出this不包含str這個(gè)class名…;
對(duì)于~~運(yùn)算符,同理,它也可以表示為:
var testData=2.1;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?Math.floor(testData):Math.ceil(testData):0;
同樣采用上下舍入的方式來(lái)理解;
JS在位運(yùn)算上用了更簡(jiǎn)便的一種方法來(lái)實(shí)現(xiàn)這中運(yùn)算,那么它的實(shí)現(xiàn)原理大致上可以這樣理解:
復(fù)制代碼 代碼如下:
var testData=-2.9;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;
首先,如果一個(gè)數(shù)據(jù)在嘗試轉(zhuǎn)換為32整形數(shù)據(jù)時(shí),結(jié)果<0,那么就需要對(duì)其上舍入,比如-2.9->-2,如果>0,對(duì)其下舍入,比如:2.6->2;
一個(gè)數(shù)據(jù)如果不能轉(zhuǎn)換為32位二進(jìn)制表示,就轉(zhuǎn)換為NaN;繼而轉(zhuǎn)為-1;比如~{}/~NaN ==-1;
又比如~function(){return 100;}->-1;
在Jquery里面,有用到比如if(!~this.className.indexOf(str)){ //do some thing…..};這里,對(duì)于this.className.indexOf(str)的返回值,要么大于-1,要么就是等于-1;在其等于-1的時(shí)候,~-1===0;然后,!~-1===true;那么就可以得出this不包含str這個(gè)class名…;
對(duì)于~~運(yùn)算符,同理,它也可以表示為:
復(fù)制代碼 代碼如下:
var testData=2.1;
var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?Math.floor(testData):Math.ceil(testData):0;
同樣采用上下舍入的方式來(lái)理解;
您可能感興趣的文章:
- js 與或運(yùn)算符 || && 妙用
- js中的 || 與 && 運(yùn)算符詳解
- javascript三元運(yùn)算符用法實(shí)例
- javascript typeof的用法與typeof運(yùn)算符介紹[詳細(xì)]
- Javascript 按位取反運(yùn)算符 (~)
- JS中三目運(yùn)算符和if else的區(qū)別分析與示例
- 詳解js運(yùn)算符單豎杠“|”與“||”的用法和作用介紹
- 教你JS中的運(yùn)算符乘方、開方及變量格式轉(zhuǎn)換
- Javascript 按位左移運(yùn)算符使用介紹(<<)
- 一起盤點(diǎn)JavaScript中一些強(qiáng)大的運(yùn)算符
相關(guān)文章
javascript下過(guò)濾數(shù)組重復(fù)值的代碼
javascript下過(guò)濾數(shù)組重復(fù)值的代碼...2007-09-09
JavaScript中自帶的 reduce()方法使用示例詳解
下文小編給大家?guī)?lái)了js中自帶的reduce()方法使用示例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-08-08
利用Angularjs和Bootstrap前端開發(fā)案例實(shí)戰(zhàn)
這篇文章主要為大家介紹了利用Angularjs和Bootstrap前端開發(fā)案例實(shí)戰(zhàn),感興趣的小伙伴們可以參考一下2016-08-08
JS實(shí)現(xiàn)網(wǎng)頁(yè)上隨機(jī)產(chǎn)生超鏈接地址的方法
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)頁(yè)上隨機(jī)產(chǎn)生超鏈接地址的方法,涉及JavaScript隨機(jī)數(shù)的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Javascript原生ajax請(qǐng)求代碼實(shí)例
這篇文章主要介紹了Javascript原生ajax請(qǐng)求代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
JS實(shí)現(xiàn)勻速運(yùn)動(dòng)的代碼實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)勻速運(yùn)動(dòng)的代碼實(shí)例,有需要的朋友可以參考一下2013-11-11
javascript字符串拆分成單個(gè)字符相加和不超過(guò)10,求最終值
javascript字符串拆分成單個(gè)字符相加和不超過(guò)10,求最終值2008-09-09
微信小程序?qū)隫ant報(bào)錯(cuò)VM292:1 thirdScriptError的解決方法
這篇文章主要給大家介紹了關(guān)于微信小程序?qū)隫ant報(bào)錯(cuò)VM292:1 thirdScriptError的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

