JS按位非(~)运算符与~~运算符的理解分析


Posted in Javascript onJuly 31, 2011

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

同样采用上下舍入的方式来理解;
Javascript 相关文章推荐
Iframe实现跨浏览器自适应高度解决方法
Sep 02 Javascript
javascript实现日期格式转换
Dec 16 Javascript
JavaScript获得页面base标签中url的方法
Apr 03 Javascript
深入解析JavaScript中的arguments对象
Jun 12 Javascript
Javascript数组循环遍历之forEach详解
Nov 07 Javascript
angularjs路由传值$routeParams详解
Sep 05 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 jQuery
Vue实现内部组件轮播切换效果的示例代码
Apr 07 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
Jul 03 Javascript
Vue组件基础用法详解
Feb 05 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
Vue常用的全选/反选的示例代码
Feb 19 Javascript
JS高级拖动技术 setCapture,releaseCapture
Jul 31 #Javascript
js中判断文本框是否为空的两种方法
Jul 31 #Javascript
图片onload事件触发问题解决方法
Jul 31 #Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
Jul 31 #Javascript
学习javascript,实现插入排序实现代码
Jul 31 #Javascript
映彩衣的js随笔(js图片切换效果)
Jul 31 #Javascript
IE6下focus与blur错乱的解决方案
Jul 31 #Javascript
You might like
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
jQuery 处理表单元素的代码
2010/02/15 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
浅谈js中的闭包
2015/03/16 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
python if not in 多条件判断代码
2016/09/21 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Apache部署Django项目图文详解
2019/07/30 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
管理科学大学生求职信
2013/11/13 职场文书
中年人生感言
2014/02/04 职场文书
党务公开方案
2014/05/06 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
自我检讨书范文
2015/01/28 职场文书
服务员岗位职责
2015/02/03 职场文书
入党积极分子个人总结
2015/03/02 职场文书
运动会主持词大全
2015/07/02 职场文书
整脏治乱工作简报
2015/07/21 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL