var testData=-2.9; var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;
首先,如果一個數(shù)據(jù)在嘗試轉(zhuǎn)換為32整形數(shù)據(jù)時,結(jié)果<0,那么就需要對其上舍入,比如-2.9->-2,如果>0,對其下舍入,比如:2.6->2; 一個數(shù)據(jù)如果不能轉(zhuǎn)換為32位二進制表示,就轉(zhuǎn)換為NaN;繼而轉(zhuǎn)為-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;