手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >JS按位非(~)运算符与~~运算符的理解分析
JS按位非(~)运算符与~~运算符的理解分析
摘要:那么,对于typeofvar!==”number”的类型来说,进行运算时,会尝试转化成32位整形数据,如果无法转换成整形数据,就转换为NaN...

那么,对于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;

同样采用上下舍入的方式来理解;

【JS按位非(~)运算符与~~运算符的理解分析】相关文章:

Jquery解析json字符串及json数组的方法

静态的动态续篇之来点XML

javascript实现动态改变层大小的方法

记录几个node.js错误及解决方案

JavaScript中的sub()方法的使用介绍

JavaScript操作Cookie方法实例分析

JavaScript数据结构与算法之链表

JavaScript窗口功能指南之在窗口中书写内容

JS中Eval解析JSON字符串的一个小问题

Javascript进制转换实例

精品推荐
分类导航