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 相关文章推荐
javascript+xml技术实现分页浏览
Jul 27 Javascript
js setattribute批量设置css样式
Nov 26 Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
JS小功能(button选择颜色)简单实例
Nov 29 Javascript
jQuery中parents()和parent()的区别分析
Oct 28 Javascript
利用js+css+html实现固定table的列头不动
Dec 08 Javascript
Express下采用bcryptjs进行密码加密的方法
Feb 07 Javascript
解决vue项目使用font-awesome,build后路径的问题
Sep 01 Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 Javascript
React中使用UMEditor的方法示例
Dec 27 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
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
javascript几个易错点记录
2014/11/26 Javascript
AngularJS快速入门
2015/04/02 Javascript
javascript常用的方法分享
2015/07/01 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
vue实现购物车的监听
2020/04/20 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
Python程序设计入门(2)变量类型简介
2014/06/16 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
python开发中range()函数用法实例分析
2015/11/12 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
使用Tkinter制作信息提示框
2020/02/18 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
4s店机修工岗位职责
2013/12/20 职场文书
运动会领导邀请函
2014/01/10 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
公司离职证明标准范本
2014/10/05 职场文书
2015年护士节活动总结
2015/02/10 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书