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 相关文章推荐
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
May 06 Javascript
JavaScript初学者应注意的七个细节小结
Jan 30 Javascript
Jquery实现简单的动画效果代码
Mar 18 Javascript
让js弹出窗口居前显示的实现方法
Jul 10 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
php,js,css字符串截取的办法集锦
Sep 26 Javascript
javascript 事件处理示例分享
Dec 31 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
jquery实现图片放大点击切换
Jun 06 jQuery
解决layui数据表格Date日期格式的回显Object的问题
Sep 19 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 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
基于mysql的bbs设计(四)
2006/10/09 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
vue 组件简介
2020/07/31 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python读写docx文件的方法
2018/05/08 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python logging模块的使用总结
2019/07/09 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
python中property和setter装饰器用法
2019/12/19 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
新书吧创业计划书
2014/01/31 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
社区党员公开承诺书
2014/08/30 职场文书
建设工程授权委托书
2014/09/22 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
python全面解析接口返回数据
2022/02/12 Python