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 相关文章推荐
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
Nov 12 Javascript
javaScript call 函数的用法说明
Apr 09 Javascript
js 弹出菜单/窗口效果
Oct 30 Javascript
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
extjs_02_grid显示本地数据、显示跨域数据
Jun 23 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
Mar 04 Javascript
如何解决hover在ie6中的兼容性问题
Dec 15 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 Javascript
小程序实现上传视频功能
Aug 18 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和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
PHP chr()函数讲解
2019/02/11 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
个人求职简历的自我评价
2013/10/19 职场文书
公司开业庆典主持词
2014/03/21 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL